Python处理数据方向之Numpy
Numpy
1.Numpy的简介
前世
NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。
Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建 NumPy 包。 这个开源项目有很多贡献者。
今生
Numpy是一个开源的Python的科学计算库,用于快速处理任意维度的数组。
Numpy支持常见的数组及矩阵的操作,对于同样的计算任务有着比Python更简洁的指令和更高效的算法。
Numpy使用nadarray对象来处理多维数组,该对象是一个快速而灵活的数据容器。
NumPy 操作
使用NumPy,开发人员可以执行以下操作:
-
数组的算数和逻辑运算。
-
傅立叶变换和用于图形操作的例程。
-
与线性代数有关的操作。 NumPy 拥有线性代数和随机数生成的内置函数。
NumPy – MatLab 的替代之一
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用。 这种组合广泛用于替代 MatLab,是一个流行的技术计算平台。 但是,Python 作为 MatLab 的替代方案,现在被视为一种更加现代和完整的编程语言。
NumPy 是开源的,这是它的一个额外的优势。
2.为什么学习Numpy
快速,简洁,对于同样的数值计算任务,使用Numpy要不直接编写Python代码更加的便捷;
Numpy中的数组的存储效率和输入输出性能均优于Python中等价的基本数据结构;
Numpy的大部分代码是使用C语言编写的,底层算法在设计上有着优异的性能,使得Numpy更加的高效。
由图可知,使用Python自带的求和函数耗时0.598,而使用Numpy求和耗时是0.088,可以明显看出ndarray的计算速度还是快很多的。
2. Numpy安装
标准的 Python 发行版不会与 NumPy 模块捆绑在一起。 一个轻量级的替代方法是使用流行的 Python 包安装程序 pip 来安装 NumPy。
pip install numpy
启用 NumPy 的最佳方法是使用特定于您的操作系统的可安装的二进制包。 这些二进制包含完整的 SciPy 技术栈(包括 NumPy,SciPy,matplotlib,IPython,SymPy 以及 Python 核心自带的其它包)
3.Numpy中的ndarray对象
Numpy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标进行集合中元素的索引。ndarray对象是用于存放同类元素的多维数组。
ndarray中的每个元素在内存中使用相同大小的块。 ndarray中的每个元素是数据类型对象的对象(称为 dtype)。
从ndarray对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。 下图显示了ndarray,数据类型对象(dtype)和数组标量类型之间的关系。
ndarray类的实例可以通过本教程后面描述的不同的数组创建例程来构造。 基本的ndarray是使用 NumPy 中的数组函数创建的,如下所示:
numpy.array
它从任何暴露数组接口的对象,或从返回数组的任何方法创建一个ndarray。
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
上面的构造器接受以下参数:
序号 | 参数及描述 |
---|---|
1. | object 任何暴露数组接口方法的对象都会返回一个数组或任何(嵌套)序列。 |
2. | dtype 数组的所需数据类型,可选。 |
3. | copy 可选,默认为true,对象是否被复制。 |
4. | order C(按行)、F(按列)或A(任意,默认)。 |
5. | subok 默认情况下,返回的数组被强制为基类数组。 如果为true,则返回子类。 |
6. | ndimin 指定返回数组的最小维数。 |
看看下面的例子来更好地理解。
-
创建一维数组
import numpy as np list01 = [1,2,3,4] a = np.array([1,2,3]) print(a) print(type(a)) 输出如下: [1, 2, 3]
-
创建二维数组
# 多于一个维度 import numpy as np list02 = [[1,2,3,4],[5,6,7,8]] a = np.array([[1, 2], [3, 4]]) print(a) print(type(a)) 输出如下: [[1, 2] [3, 4]]
-
最小维度
# 最小维度 import numpy as np a = np.array([1, 2, 3,4,5], ndmin = 2) print(a) print(type(a)) 输出如下: [[1, 2, 3, 4, 5]]
-
三维数组
# dtype 参数 import numpy as np list03 = [[[1,2,3,4],[5,6,7,8],[9,10,11,12]]] a = np.array([1, 2, 3], dtype = complex) print(a) print(type(a)) 输出如下: [ 1.+0.j, 2.+0.j, 3.+0.j]
**ndarray ** 对象由计算机内存中的一维连续区域组成,带有将每个元素映射到内存块中某个位置的索引方案。 内存块以按行(C 风格)或按列(FORTRAN 或 MatLab 风格)的方式保存元素。
参考链接:
TutorialsPoint NumPy 教程
numpy安装
数据分析库Numpy简介
Numpy入门(一):Numpy的安装和创建
用arange 创建数组
#一维数组
a = np.arange(10) #[0 1 2 3 4 5 6 7 8 9]
a = np.arange(2,10) #[2 3 4 5 6 7 8 9]
a = np.arange(1,10,2) #[1 3 5 7 9]
a = np.arange(1,10,2,dtype=float)
print(a)
#二维数组
#切记前面的12,必须满足3*4
np01 = np.arange(12).reshape(3, 4)
print(np01)
用random创建数组
# np.random.random() 生成0到1之间的随机数
#创建一维数组 size生成几个数据,可直接写4
np01= np.random.random(size=4) #[0.13475357 0.8088961 0.52055803 0.49706622]
#创建二维数组 size=(3,4) 3行4列 可用()和[] ,效果一样
np01= np.random.random((3,4))
#创建三维数组 两个三行四列
np01= np.random.random((2,3,4))
print(np01)
使用logspace创建数组
np.logspace(start,stop,num=50,endpoint=Ture,base=10.0,dtype=None)
参数 | 描述 |
---|---|
start | 序列的起始值 |
stop | 序列的终止值 ,如果endpoint=True,则证明数组包含于数列 |
num | 生成样本数量,默认是50 |
endpoint | 如果为ture则包含stop,否则不包含 |
base | 对数log的底数,默认10.0 |
dtype | 数据类型 |
下图为数组常见的数据类型:
4. 在 array 函数中使用 python 自带的 list ,在多维数组中在 list 中存放多个元祖。
使用 empty, zeros, ones, identity,eye 创建矩阵:
>>> import numpy as np
#使用empty创建2x2矩阵
>>> a = np.empty([2,2])
>>> print a
[[1.92432613e-295 1.92410215e-295]
[1.92414694e-295 1.92414694e-295]]
identity 为返回一个 N 维单位方阵。
同样的还有 empty_like, ones_like, zeros_like 是复制对方的维数,进行相应的处理。
使用 arange 和 linspace 生成数组:
在 0 到 2 中按步长为 0.3 生成数组:
>>> np.arange( 0, 2, 0.3 )
array([0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
在 0 到 2 中生成 9 个数:
>>> np.linspace( 0, 2, 9 )
array([0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
Numpy 中数组的基本属性
在 Numpy 中生成的数组叫做 ndarray , 在 ndarray 中有如下的属性:
ndarray.ndim: 数组维数
程序如下:
>>> a = np.zeros([3,4])
>>> a.ndim
2
>>> b = np.zeros([3,4,5])
>>> b.ndim
3
>>>
ndarray.shape:数组的结构 几乘几 数组
>>> print a.shape
(3, 4)
>>> print b.shape
(3, 4, 5)
>>>
ndarray.size: 数组有几个元素
>>> print a.size
12
>>> print b.size
60
>>>
Numpy 中数组的保存
使用 tofile 和 fromfile
import numpy as np
a = np.array([(1,2,3,4),(4,5,2,4)])
print a
a.tofile("filename.bin")
b = np.fromfile("filename.bin",dtype = np.int32)
print b.reshape(2,4)
还可以使用 np.save() np.load() 和 np.savez() 这一组合进行数据的存储。
import numpy as np
a = np.array([(1,2,3,4),(4,5,2,4)])
print a
np.save("a.npy", a)
c = np.load("a.npy")
print c
另外一组为 savetxt() 和 loadtxt()
import numpy as np
a = np.array([(1,2,3,4),(4,5,2,4)])
print a
np.savetxt("a.txt", a)
np.loadtxt("a.txt")
c = np.load("a.npy")
print c