我爱编程Python2

NumPy

2017-05-30  本文已影响0人  Epiphanyyaoyao

定义数组array:
a = np.arange(20)

创建多维数组
a.reshape(4,5)

定义零矩阵
np.zeros((4,5))

简单的四则运算已经重载过了,全部的+,-,*,/运算都是基于全部的数组元素的。
NumPy里这些运算符也可以对标量和数组操作,结果是数组的全部元素对应这个标量进行运算,还是一个数组。

在处理中Python会自动将整数转换为浮点数(因为数组是同质的),并且,两个二维数组相加要求各维度大小相同。

类似C++,+=、-=、*=、/=操作符在NumPy中同样支持。

科学计算中大量使用到矩阵运算,除了数组,NumPy同时提供了矩阵对象(matrix)。矩阵对象和数组的主要有两点差别:一是矩阵是二维的,而数组的可以是任意正整数维;二是矩阵的操作符进行的是矩阵乘法,乘号左侧的矩阵列和乘号右侧的矩阵行要相等,而在数组中操作符进行的是每一元素的对应相乘,乘号两侧的数组每一维大小需要一致。

数组可以通过asmatrix或者mat转换为矩阵。
a = np.arange(20).reshape(4, 5)
a = np.asmatrix(a)
a = mp.mat(a)

b = np.matrix('1.0 2.0; 3.0 4.0')

arange函数还可以通过arange(起始,终止,步长)的方式调用生成等差数列,注意含头不含尾。
arange指定的是步长,如果想指定生成的一维数组的长度怎么办?好办,linspace就可以做到:
np.linspace(0, 2, 9)

array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])

可以通过下标访问来修改数组元素的值。

【陷阱】
a = np.array([[3.2, 1.5], [2.5, 4]])
b=a
这里的b只是复制了一下a的内存地址,并没有真正复制一份a的数据,因此改变a的值同时也会改变b的值。若想避免这个问题,使用copy函数。
b = a.copy()

可使用where函数查找特定值在数组中的位置:
loc = numpy.where(a==11)
print loc

print a[loc[0][0], loc[1][0]]

数组转置(用于矩阵转置)
a = np.transpose(a)

矩阵求逆
ia = nlg.inv(a)

矩阵特征值和特征向量
eig_value, eig_vector = nlg.eig(a)

矩阵块操作
a = np.array((1,2,3))
b = np.array((2,3,4))
print np.column_stack((a,b))
在循环处理某些数据得到结果后,将结果拼接成一个矩阵是十分有用的,可以通过vstack和hstack完成。

缺失值在分析中也是信息的一种,NumPy提供nan作为缺失值的记录,通过isnan判定。nan_to_num可用来将nan替换成0。

上一篇下一篇

猜你喜欢

热点阅读