NumPy
定义数组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。