7.3 NumPy基础操作
7.3.1 通用函数
7.3.2 数组索引
数组可以使用扩展的Python切片语法array[selection]进行索引。
x[i]
索引第i个元素
x[-i]
反向索引第i个元素
x[m: n]
以默认步长1从第m+1个元素索引至第n-1个元素
x[-m:-n]
以默认步长1从倒数第m个元素索引至倒数第n-1个元素
x[m, n, j]
以步长j从从第m+1个元素索引至第n-1个元素
数组可以使用类似序列对象类型的语法进行索引:
[]: x[1, 2] #查看第2行第3列的元素
[]:6.0
[]:x[:,1]#查看第二列元素
[]:array([2., 5., 8.])
[]:x[1] #查看第二行元素
[]:array([4., 5., 6.])
7.2.3 数组算术
ndarray对象类型可以对数组元素进行批量操作,这种特性称为矢量化。
[]:x*x
[]:array([[ 2., 4., 6.],
[ 8., 10., 12.],
[14., 16., 18.]])
[]:x-x
[]:array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
[]:x*x
[]:array([[ 1., 4., 9.],
[16., 25., 36.],
[49., 64., 81.]])
[]:x/x
[]:array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
[]:x**x
[]:array([[1.00000000e+00, 4.00000000e+00, 2.70000000e+01],
[2.56000000e+02, 3.12500000e+03, 4.66560000e+04],
[8.23543000e+05, 1.67772160e+07, 3.87420489e+08]])
7.3.4 数组属性
ndarray数组常用属性如下表:
数组内存布局信息
数组的形状
Tuple of bytes to step in each dimension when traversing an array.
数组维数
包含数组元素的缓存地址
数组元素的个数
每个数组元素的字节大小
数组元素的总字节数
数组转置,与transpose()方法相同
数组的实部
数组的虚部
一维数组迭代器
下面我们查看ndarray对象x的相关属性:
[]:x.flags
[]: C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
[]:x.nbytes
[]:72
7.3.5 数组方法
接下来我们介绍常用数组方法:
数组创建
可以使用下列方法来创建数组对象
ndarray.array([x, …], dtype=int)
使用Python列表和元组创建ndarray数组
ndarray.arange(m, n, i)
创建一个从m到n,以i为步长的ndarray数组
ndarray.linspace(m, n, l)
创建一个从m到n,等分为l个元素的ndarray数组
ndarray.indices((m,n ))
创建一个m行n列矩阵
nndarray.random.rand(m, n)
创建一个m行n列的随机数组
np.ones((m, n), dtype)
创建一个m行n列全1数组
np.empty((m, n), dtype)
创建一个m行n列全0数组
创建一个3行5列的全1数组:
[]:np.ones((3,5))
[]:array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
创建一个4行5列的随机数组
[]:array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
[]:array([[0.02056306, 0.71741279, 0.90432924, 0.73616127, 0.63019217],
[0.71198986, 0.23522983, 0.76942657, 0.74224889, 0.0969868 ],
[0.15701329, 0.05086768, 0.83441576, 0.1043487 , 0.33995561],
[0.25604749, 0.63719473, 0.20883015, 0.75983402, 0.67768955]])
数组转换
可以使用下列方法对ndarray对象进行转换
将数组的元素复制到标准Python标量并返回它。
以(可能是嵌套的)列表的形式返回数组。
将标量插入数组(如果可能,标量将转换为数组的dtype)
将数组以文本或二进制形式写入文件(默认值)。
返回数组的副本。
具有相同数据的数组的新视图。
用标量值填充数组。
将一个大小维的三维随机数组转为列表形式
[]:np.random.rand(2,3,2).tolist()
[]:[[[0.6522732091435327, 0.30567594621945293],
[0.6144978942635615, 0.00535896256724222],
[0.20425276599130826, 0.012501269195163922]],
[[0.9406005870981111, 0.6682967703772825],
[0.23029639908927446, 0.9903955382985428],
[0.6846793144592922, 0.6686806969051653]]]
形状操纵
对于重新塑造、调整大小和转置,可以用n个整数替换单个元组参数,这些整数将被解释为一个n元组。
返回包含具有新形状的相同数据的数组。
改变数组的形状
返回数组的转置
返回交换了axis1和axis2的数组的视图。
返回折叠成一维的数组的副本。
返回一个扁平数组
将一个大小为的2维随机数组展平:
[]:np.random.rand(2,3,2).flatten()
[]:array([0.55389146, 0.29099669, 0.49944941, 0.75609966, 0.59443963,
0.10997695, 0.52392316, 0.81634779, 0.86769176, 0.35935143,
0.03287644, 0.69989962])
将一个大小为的2维随机数组随机数组重塑为的随机数组:
[]:x=np.random.rand(2,3)
x
[]:array([[0.67406133, 0.3566374 , 0.2665187 ],
[0.24009316, 0.59855278, 0.32029325]])
[]:x.reshape(3,2)
[]:array([[0.67406133, 0.3566374 ],
[0.2665187 , 0.24009316],
[0.59855278, 0.32029325]])
数组计算
可以使用下列方法对ndarray数组进行计算:
Return indices of the maximum values along the given axis. 返回指定轴上最大值的索引。
返回指定轴上得最小值
返回指定轴上最小值得索引。
返回指定轴轴的数值波动范围
以数组形式返回指定范围内的元素。
返回四舍五入到特定位数的小数。
返回数组对角线的和。
返回给定轴上数组元素的和。
返回数组元素沿给定轴的平均值。
返回数组元素沿给定轴的方差。
返回数组元素沿给定轴的标准差。
返回数组元素在给定轴上的乘积
上述方法对axis轴进行计算。的axis参数如果维None,则将数组视作一维数组。
例:创建一个大小为3×3×3的三维数组,对它的三个轴求和
[]:x=np.random.rand(3,3,3)
x
[]:array([[[0.57982037, 0.41002888, 0.72101916],
[0.93451008, 0.47677948, 0.55761938],
[0.3703933 , 0.54361156, 0.95946646]],
[[0.73779921, 0.08440105, 0.00188711],
[0.32432818, 0.2609275 , 0.61720936],
[0.77805538, 0.69264117, 0.75065842]],
[[0.56759239, 0.16964658, 0.5724592 ],
[0.42525304, 0.89439075, 0.76269357],
[0.649416 , 0.30066668, 0.46065574]]])
[]:x.sum(axis=0), x.sum(axis=1), x.sum(axis=2)
[]:(array([[1.88521197, 0.66407651, 1.29536547],
[1.6840913 , 1.63209773, 1.93752231],
[1.79786468, 1.5369194 , 2.17078062]]),
array([[1.88472375, 1.43041992, 2.23810499],
[1.84018276, 1.03796971, 1.36975488],
[1.64226143, 1.36470401, 1.79580851]]),
array([[1.71086841, 1.96890893, 1.87347132],
[0.82408737, 1.20246503, 2.22135496],
[1.30969818, 2.08233737, 1.41073841]]))
一些方法带有out参数,可以将结果输出到out参数指定的数ndarray组中。
Last updated
Was this helpful?