赞
踩
翻译自官方文档Tentative NumPy Tutorial,有删节。
NumPy 提供了对多维数组的支持,与Python原生支持的List类型不同,数组的所有元素必须同样的类型。数组的维度被称为axes,维数称为 rank。
Numpy的数组类型为 ndarray, ndarray 的重要属性包括:
一个简单的例子:
- >>> from numpy import *
- >>> a = arange(15).reshape(3, 5)
- >>> a
- array([[ 0, 1, 2, 3, 4],
- [ 5, 6, 7, 8, 9],
- [10, 11, 12, 13, 14]])
- >>> a.shape
- (3, 5)
- >>> a.ndim
- 2
- >>> a.dtype.name
- 'int32'
- >>> a.itemsize
- 4
- >>> a.size
- 15
- >>> type(a)
- numpy.ndarray
- >>> b = array([6, 7, 8])
- >>> b
- array([6, 7, 8])
- >>> type(b)
- numpy.ndarray
有许多种方法生成数组。比如,可以将Python list 或 tuple 转化为数组,转化后的数组元素的类型由原来的对象的类型来决定。
- >>> from numpy import *
- >>> a = array( [2,3,4] )
- >>> a
- array([2, 3, 4])
- >>> a.dtype
- dtype('int32')
- >>> b = array([1.2, 3.5, 5.1])
- >>> b.dtype
- dtype('float64')
- >>> b = array( [ (1.5,2,3), (4,5,6) ] )
- >>> b
- array([[ 1.5, 2. , 3. ],
- [ 4. , 5. , 6. ]])
生成数组时也可以指定元素的数据类型:
- >>> c = array( [ [1,2], [3,4] ], dtype=complex )
- >>> c
- array([[ 1.+0.j, 2.+0.j],
- [ 3.+0.j, 4.+0.j]])
通常,我们无法事先知道数组元素的具体值,但是数组大小是已知的。 这时可以用下面几种方法生成数组。
zeros 函数生成元素全部为0的数组,ones函数生成元素全部为1的数组empty函数生成元素没有赋值的数组,这时元素值由内存中原来的内容决定。 默认的,生成的数组的元素类型为float64.
- >>> zeros( (3,4) )
- array([[0., 0., 0., 0.],
- [0., 0., 0., 0.],
- [0., 0., 0., 0.]])
- >>> ones( (2,3,4), dtype=int16 ) # dtype can also be specified
- array([[[ 1, 1, 1, 1],
- [ 1, 1, 1, 1],
- [ 1, 1, 1, 1]],
- [[ 1, 1, 1, 1],
- [ 1, 1, 1, 1],
- [ 1, 1, 1, 1]]], dtype=int16)
- >>> empty( (2,3) )
- array([[ 3.73603959e-262, 6.02658058e-154, 6.55490914e-260],
- [ 5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
arange 函数生成的数组的元素按照等比数列排布,类似于 range函数。
- >>> arange( 10, 30, 5 )
- array([10, 15, 20, 25])
- >>> arange( 0, 2, 0.3 ) # it accepts float arguments
- array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
linspace 函数有些类似matlab中的同名函数,下面是个例子:
- >>> linspace( 0, 2, 9 ) # 9 numbers from 0 to 2
- array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
- >>> x = linspace( 0, 2*pi, 100 ) # useful to evaluate function at lots of points
- >>> f = sin(x)
当用print 打印一个 array时, 输出结果类似于 lists:
- >>> a = arange(6) # 1d array
- >>> print a
- [0 1 2 3 4 5]
- >>>
- >>> b = arange(12).reshape(4,3) # 2d array
- >>> print b
- [[ 0 1 2]
- [ 3 4 5]
- [ 6 7 8]
- [ 9 10 11]]
- >>>
- >>> c = arange(24).reshape(2,3,4) # 3d array
- >>> print c
- [[[ 0 1 2 3]
- [ 4 5 6 7]
- [ 8 9 10 11]]
-
- [[12 13 14 15]
- [16 17 18 19]
- [20 21 22 23]]]
如果数组过大,显示时会有一些省略号:
- >>> print arange(10000)
- [ 0 1 2 ..., 9997 9998 9999]
- >>>
- >>> print arange(10000).reshape(100,100)
- [[ 0 1 2 ..., 97 98 99]
- [ 100 101 102 ..., 197 198 199]
- [ 200 201 202 ..., 297 298 299]
- ...,
- [9700 9701 9702 ..., 9797 9798 9799]
- [9800 9801 9802 ..., 9897 9898 9899]
- [9900 9901 9902 ..., 9997 9998 9999]]
如果我们需要显示完整的数组,可以如下设置
>>> set_printoptions(threshold='nan')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。