您的位置:首页 > 编程语言 > Python开发

NumPy学习笔记--入门篇

2013-03-04 09:51 239 查看



[转]NumPy学习笔记 收集者:Keengle(http://www.kgblog.net)
http://www.techwork.cn/paul/?p=530
最近在学习scipy。在理解scipy之前,numpy作为scipy基本的模块之一,是不得不去理解掌握的。先总结一下numpy部分的内容吧。接下来学习scipy,最后是pylab和Matplotlib。

介绍

Numpy是一个Python的扩展模块,通过使用NumPy,我们可以进行科学计算。NumPy提供了矩阵、线性代数、傅里叶变换等的解决方法。

NumPy包含:

· N维矩阵对象

· 线性代数运算功能

· 傅里叶变换

· Fortran代码集成的工具

· C++代码集成的工具

NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。前者为一个n维的矩阵在Python中的存储对象,它是一类同类型的对象(如int、bool、unicode、str等等)的集合。

下载

为了使用NumPy,首先要有Python。然后下载NumPy的包,即可。

· Python 2.5: http://www.python.org/download/releases/2.5.2/

· NumPy: http://numpy.scipy.org/

使用

安装好后,首先引入模块:

>>> 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():求平均数

总结了一部分,更多的方法还需要我们使用中体验。

#Python
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: