当在numpy中,使用整数索引,有个地方需要注意。
import numpy as np
nda = np.arange(36)
nda = nda.reshape(3,4,3)
数据是这样的:
array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]], [[12, 13, 14], [15, 16, 17], [18, 19, 20], [21, 22, 23]], [[24, 25, 26], [27, 28, 29], [30, 31, 32], [33, 34, 35]]])
如果我们执行:
nda[[0,1,2], [2,3,1]] 表示取 3 个分别坐标[0,2], [1,3], [2,1] 数据组成一个新的列表,结果为:
array([[ 6, 7, 8],
[21, 22, 23],
[27, 28, 29]])
再换一下,如果执行的是 nda[[0,1], [2,3], [1,2]],则表示从取个分别坐标为:[0,2,1], [1,3,2] 的数据组成一个新的列表,结果为:
array([ 7, 23])
nda[np.ix_([0,1], [2,3], [1,2])],此时的结果是:
array([[[ 7, 8],
[10, 11]],
[[19, 20],
[22, 23]]])
保持相同的维度数,每个维度的数量根据索引数组进行了筛选。
所以,当采用整数数组进行索引时,一定想搞清楚,自己的目标是什么,确定要不要采用 numpy.ix_ 方法