原文地址:http://hyry.dip.jp/tech/book/page/scipy/numpy_ndarray.html
ndarray对象
函数库的导入
本书的示例程序假设用以下推荐的方式导入NumPy函数库:
创建
NumPy的函数和方法都有详细的说明文档和用法示例。在IPython中输入函数名并添加一个“?”号即可以显示文档内容,例如输入:“np.array?”可以查看array()的说明。
首先需要创建数组才能对其进行运算和操作。可以通过给array()函数传递Python的序列对象创建数组,如果传递的是多层嵌套的序列,将创建多维数组(下例中的变量c):
>>> a = np.array([1, 2, 3, 4])
>>> b = np.array((5, 6, 7, 8))
>>> c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
>>> b
array([5, 6, 7, 8])
>>> c
array([[1, 2, 3, 4],
[4, 5, 6, 7],
[7, 8, 9, 10]])
数组的形状可以通过其shape属性获得,它是一个描述数组各个轴长度的元组(tuple):
>>> a.shape
(4,)
>>> c.shape
(3, 4)
数组a的shape属性只有一个元素,因此它是一维数组。而数组c的shape属性有两个元素,因此它是二维数组,其中第0轴的长度为3,第1轴的长度为4。还可以通过修改数组的shape属性,在保持数组元素个数不变的情况下,改变数组每个轴的长度。下面的例子将数组c的shape属性改为(4,3),注意从(3,4)改为(4,3)并不是对数组进行转置,而只是改变每个轴的大小,数组元素在内存中的位置并没有改变:
>>> c.shape = 4,3
>>> c
array([[ 1, 2, 3],
[ 4, 4, 5],
[ 6, 7, 7],
[ 8, 9, 10]])
当设置某个轴的元素个数为-1时,将自动计算此轴的长度。由于数组c中有12个元素,因此下面的程序将数组c的shape属性改为了(2,6):
>>> c.shape = 2,-1
>>> c
array([[ 1, 2, 3, 4, 4, 5],
[ 6, 7, 7, 8, 9, 10]])
使用数组的reshape()方法,可以创建指定形状的新数组,而原数组的形状保持不变:
>>> d = a.reshape((2,2)) # 也可以用a.reshape(2,2)
>>> d
array([[1, 2],
[3, 4]])
>>> a
array([1, 2, 3, 4])
数组a和d其实共享数据存储空间,因此修改其中任意一个数组的元素都会同时修改另外一个数组的内容:
>>> a[1] = 100 # 将数组a的第一个元素改为100
>>> d # 注意数组d中的2也被改为了100
array([[ 1, 100],
[ 3, 4]])
数组的元素类型可以通过dtype属性获得。前面例子中,创建数组所用的序列的元素都是整数,因此所创建的数组的元素类型是整型,并且是32bit的长整型:
>>> c.dtype
dtype('int32')
可以通过dtype参数在创建数组时指定元素类型,注意float类型是64bit的双精度浮点类型,而complex是128bit的双精度复数类型:
>>> np.array([1, 2, 3, 4], dtype=np.float)
array([ 1., 2., 3., 4.])
>>> np.array([1, 2, 3, 4], dtype=np.complex)
array([ 1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j])
NumPy中的数据类型都有几种字符串表示方式,字符串和类型之间的对应关系都储存在typeDict字典中,例如’d’、 ‘double’、’float64’都表示双精度浮点数类型:
>>> np.typeDict["d"]
<type 'numpy.float64'>
>>> np.