我正在(重新)建立对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数组进行索引意味着什么?
答案 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] = 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
。 {{1}以来的b[1,1] = 11
和i[0,0] = 2
以及j[0,0] = 3
。
因此您可以说a[2,3] = 11
将确定“行索引”,而i
将确定“列索引”。当然,此概念也具有更大的维度:第一个“索引器”因此确定第一个索引中的索引,第二个“索引器”确定第二个索引中的索引,依此类推。