ndarray.ndim
数组的轴(维度)的个数。在Python世界中,维度的数量被称为rank。
ndarray.shape
数组的维度。这是一个整数的元组,表示每个维度中数组的大小。对于具有n行和m列的矩阵,shape
将是(n,m)
。因此,shape
元组的长度就是rank或维度的个数ndim
。
ndarray.size
数组元素的总数。这等于shape
的元素的乘积。
ndarray.dtype
描述数组中元素类型的对象。可以使用标准Python类型创建或指定dtype。另外NumPy提供了自己的类型。例如numpy.int32、numpy.int16和numpy.float64。
ndarray.itemsize
数组中每个元素的字节大小。例如,元素为float64
类型的数组的itemsize
为8(=64/8),而complex32
类型的数组的comitemsize
为4(=32/8)。它等于ndarray.dtype.itemsize
。
创建数组的几种方法
>>> import numpy as np>>> a = np.array([2,3,4])>>> aarray([2, 3, 4])>>> a.dtypedtype('int64')>>> b = np.array([1.2, 3.5, 5.1])>>> b.dtypedtype('float64')
>>> b = np.array([(1.5,2,3), (4,5,6)])>>> barray([[ 1.5, 2. , 3. ], [ 4. , 5. , 6. ]])
数组的类型也可以在创建时明确指定:
>>> c = np.array( [ [1,2], [3,4] ], dtype=complex )>>> carray([[ 1.+0.j, 2.+0.j], [ 3.+0.j, 4.+0.j]])
能够创建数组的几个函数
NumPy提供了几个函数来创建具有初始占位符内容的数组。
函数zeros
创建一个由0组成的数组,函数ones
创建一个由1数组的数组,函数empty
内容是随机的并且取决于存储器的状态。默认情况下,创建的数组的dtype为float64
。
>>> np.zeros( (3,4) )array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.]])>>> np.ones( (2,3,4), dtype=np.int16 ) # dtype can also be specifiedarray([[[ 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)>>> np.empty( (2,3) ) # uninitialized, output may varyarray([[ 3.73603959e-262, 6.02658058e-154, 6.55490914e-260], [ 5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
为了创建数字序列,NumPy提供类似于range
的函数,返回数组而不是列表。
>>> np.arange( 10, 30, 5 )array([10, 15, 20, 25])>>> np.arange( 0, 2, 0.3 ) # it accepts float argumentsarray([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
当arange
与浮点参数一起使用时,由于浮点数的精度是有限的,通常不可能预测获得的元素数量。出于这个原因,通常最好使用函数linspace
,它接收我们想要的元素数量而不是步长作为参数:
>>> from numpy import pi>>> np.linspace( 0, 2, 9 ) # 9 numbers from 0 to 2array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])>>> x = np.linspace( 0, 2*pi, 100 ) # useful to evaluate function at lots of points>>> f = np.sin(x)
另见
, , , , , , , , ,, , ,
打印数组
如果数组太大而无法打印,NumPy会自动跳过数组的中心部分,并只打印边角:
>>> print(np.arange(10000))[ 0 1 2 ..., 9997 9998 9999]>>>>>> print(np.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]]
要禁用此行为并强制NumPy打印整个数组,你可以使用set_printoptions
更改打印选项。
>>> np.set_printoptions(threshold='nan')
基本操作
数组上的算术运算符使用元素级别。将创建一个新数组并用结果填充。
>>> a = np.array( [20,30,40,50] )>>> b = np.arange( 4 )>>> barray([0, 1, 2, 3])>>> c = a-b>>> carray([20, 29, 38, 47])>>> b**2array([0, 1, 4, 9])>>> 10*np.sin(a)array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854])>>> a<35array([ True, True, False, False], dtype=bool)
与许多矩阵语言不同,乘法运算符*
的运算在NumPy数组中是元素级别的。可以使用dot
函数或方法执行矩阵乘积:
>>> A = np.array( [[1,1],... [0,1]] )>>> B = np.array( [[2,0],... [3,4]] )>>> A*B # elementwise productarray([[2, 0], [0, 4]])>>> A.dot(B) # matrix productarray([[5, 4], [3, 4]])>>> np.dot(A, B) # another matrix productarray([[5, 4], [3, 4]])