首页 > 技术文章 > 【转】NumPy基本操作

zhangjing327 2013-12-17 16:45 原文

Numpy是一个Python的扩展模块,通过使用NumPy,我们可以进行科学计算。NumPy提供了矩阵、线性代数、傅里叶变换等的解决方法。NumPy包含:N维矩阵对象,线性代数运算功能,傅里叶变换,Fortran代码集成的工具,C++代码集成的工具。NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。

基本操作:

>>> from numpy import *
创建一个矩阵
>>> a=array([[1,2,3],[4,5,6]])
>>> a.shape
(2, 3)
>>> b=arange(15);print b
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
>>> b.reshape(3,5)
array([[ 0,  1,  2,  3,  4],
[ 5,  6,  7,  8,  9],
[10, 11, 12, 13, 14]])
可以看到,A是2行3列的矩阵。通过arange方法,可以得到一个1维的数组。然后我们可以通过reshape方法改变它的维度。
>>> c=zeros((4,5));print c
[[ 0.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  0.]]
>>> d=ones((5,7));print d
[[ 1.  1.  1.  1.  1.  1.  1.]
[ 1.  1.  1.  1.  1.  1.  1.]
[ 1.  1.  1.  1.  1.  1.  1.]
[ 1.  1.  1.  1.  1.  1.  1.]
[ 1.  1.  1.  1.  1.  1.  1.]]
>>> e=add(c,arange(20).reshape(4,5))
>>> f=dot(e,d);print f
[[ 10.  10.  10.  10.  10.  10.  10.]
[ 35.  35.  35.  35.  35.  35.  35.]
[ 60.  60.  60.  60.  60.  60.  60.]
[ 85.  85.  85.  85.  85.  85.  85.]]
使用zeros可以生成一个零矩阵。同理,用ones可以生成值全部为1的矩阵。我选择了一个4*5的矩阵e,和一个5*7的矩阵d做点乘。最后得到f矩阵。再举一个更加明显的例子:
>>> a=arange(5);print a
[0 1 2 3 4]
>>> b=arange(5).reshape(5,1);print b
[[0]
[1]
[2]
[3]
[4]]
>>> print dot(a,b)
[30]
点积的效果更加明显了。

 

ndarray的几个常用属性:

  • shape: 代表一个array的形态,是一个向量还是一个矩阵,抑或是一个更复杂的向量组。
  • ndim: 代表这个array的维度
  • size: 在array中拥有的元素数量
  • itemsize: 这个array中每一个元素所需要占的字节数
  • nbytes: 这个array的总字节数(=itemsize*size)
  • real: 代表一个array中所有元素的实数部分
  • imag: 同理,代表一个array中所有元素的虚数部分
  • flat: 将这个array整理成一维的,可以索引的一系列的元素组合。它实际上是通过iterator实现的,我们可以通过for x in array.flat来取得到所有的元素
  • T: 矩阵转置,同transpose()方法

一些比较有用的方法:

  • tolist(): 将array转化成一个Python中的list对象
  • item(*args): 取得某一位置的元素
  • dump(file): 将这个对象序列化至文件。同cPickle中的dump作用
  • dumps(): 将序列化的结果通过字符串加以输出

一些关于Array的形态操作:

  • reshape(): 改变array的形态
  • resize(): 也是改变array的形态。不同的是,resize是直接修改这个对象的,而reshape则会生成一个新的对象
  • transpose(): 这个就是矩阵的转置操作啦
  • swapaxes(): 将n个维度中任意两个维度(坐标轴)进行调换
  • flatten(): 复制一个一维的array出来

还有一些关于Array的运算操作:

  • max():取得所有元素中的最大值
  • min():取得最小值。还有一点值得说,就是max、min这些函数都可以针对某一坐标轴(具体维度)进行运算,例如array.max(axis=0),就在0坐标上求最大值
  • sum():求和
  • cumsum():求累计和
  • prod():求所有元素之积
  • cumprod():求累计积
  • all():如果所有元素都为真,那么返回真;否则返回假
  • any():只要有一个元素为真则返回真
  • mean():求平均数

推荐阅读