带有2D数组的Numpy花式索引-说明

时间:2020-01-07 17:23:10

标签: 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数组进行索引意味着什么?

1 个答案:

答案 0 :(得分:2)

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

这意味着您正在构造2d数组 R ,例如R=A[B, C]。这意味着 r ij = a b ij c ij 的值。

因此,这意味着位于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] = 0j[0,0] = 2以及a[0,2] = 2b[0,1] = 5之后的i[0,0] = 1,以及j[0,0] = 1以及a[1,1] = 5b[1,0] = 7之后的i[0,0] = 1,以及j[0,0] = 3以及a[1,3] = 7。 {{1}以来的b[1,1] = 11i[0,0] = 2以及j[0,0] = 3

因此您可以说a[2,3] = 11将确定“行索引”,而i将确定“列索引”。当然,此概念也具有更大的维度:第一个“索引器”因此确定第一个索引中的索引,第二个“索引器”确定第二个索引中的索引,依此类推。