使用2D数组的Numpy fancy索引-说明

使用2D数组的Numpy fancy索引-说明,numpy,Numpy,我刚刚使用过numpy,现在正在(重新)积累我的numpy知识。 我有一个关于多维(在本例中是2D)数组的奇特索引的问题 给出以下代码段: >>> a = np.arange(12).reshape(3,4) >>> a array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> i = np.array( [ [0,1],

我刚刚使用过numpy,现在正在(重新)积累我的numpy知识。 我有一个关于多维(在本例中是2D)数组的奇特索引的问题

给出以下代码段:

>>> a = np.arange(12).reshape(3,4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> i = np.array( [ [0,1],                        # indices for the first dim of a
...                 [1,2] ] )
>>> j = np.array( [ [2,1],                        # indices for the second dim
...                 [3,3] ] )
>>>
>>> a[i,j]                                     # i and j must have equal shape
array([[ 2,  5],
       [ 7, 11]])
有人能用简单的英语解释一下给出结果的逻辑吗。理想情况下,该解释适用于用于索引数组的3D和更高秩数组

从概念上讲(根据对“行”和“列”的限制),使用2D数组进行索引意味着什么

从概念上讲(根据对“行”和“列”的限制),使用2D数组进行索引意味着什么

这意味着您正在构造一个二维数组R,这样
R=a[B,C]
。这意味着rij=abijcij的值

因此,这意味着位于
R[0,0]
的项目是
A
中的项目,具有行索引
B[0,0]
和列索引
C[0,0]
。项目
R[0,1]
A
中的项目,行索引为
B[0,1]
,列索引为
C[0,1]
,等等


因此,在这个具体案例中:

>>> b = a[i,j]
>>> b
array([[ 2,  5],
       [ 7, 11]])
b[0,0]=2
因为
i[0,0]=0
,而
j[0,0]=2
,因此
a[0,2]=2
b[0,1]=5
因为
i[0,0]=1
,而
j[0,0]=1
,因此
a[1,1]=5
b[1,0]=7
因为
i[0,0]=1
,而
j[0,0]=3
,因此
a[1,3]=7
b[1,1]=11
因为
i[0,0]=2
,而
j[0,0]=3
,因此
a[2,3]=11


因此可以说,
i
将确定“行索引”,而
j
将确定“列索引”。当然,这个概念也适用于更多维度:因此第一个“索引器”确定第一个索引中的索引,第二个“索引器”确定第二个索引中的索引,依此类推。

您构建一个二维数组,其中
[0,0]
处的元素位于
[0,2]
(该项的
i
m
j
值)等。使用R的公式进行了很好的解释。