[英]Indexing 2d array with 2d array in Numpy
我有一个问题困扰了我几天。 假设我们在 Numpy 中定义了一个二维数组:
x = np.array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
我们还定义了一个用于索引的一维数组,比方说:
ind = np.array([2,1])
如果我们尝试x[ind]
我们将得到:
array([[6, 7, 8],
[3, 4, 5]])
这很有意义: x
的第 2 行和第 1 行。
如果我们运行: x[:,ind]
我们将得到:
array([[2, 1],
[5, 4],
[8, 7]])
同样,这很有意义 - 我们收到第 2 列,然后是第 1 列
现在我们将索引数组定义为 2d:
ind = np.array([[2,1],
[2,2]])
如果我们运行x[ind]
我们得到:
array([[[6, 7, 8],
[3, 4, 5]],
[[6, 7, 8],
[6, 7, 8]]])
同样,这是有道理的——对于索引二维数组中的每一行,我们都会收到一个二维数组,它代表原始二维数组x
中的相应行。
但是,如果我们运行x[:,ind]
我们会收到下一个数组:
array([[[2, 1],
[2, 2]],
[[5, 4],
[5, 5]],
[[8, 7],
[8, 8]]])
我不明白这个 output 因为它返回索引行中的特定项目,但不是完整行。 我会假设,就像x[:,ind]
是一维数组时的情况一样,我们将收到 2d arrays ,其中包括来自原始x
数组的原始列。
在索引数组的最后一种情况下:
print(ind)
array([[2, 1],
[2, 2]])
由于ind
是一个形状为(2,2)
的2D
数组,并且您沿第一个轴取一个完整的切片,因此您将使用ind
在其每一行上沿A
的列进行索引。 因此,例如,通过使用ind
索引第二行[3, 4, 5]
,您将再次获得索引2->5
、 1->4
、 2->5
和2->5
处的元素,结果形状与ind
相同,因此[[5,4][5,5]]
。
它的每一行都相同,从而产生(3,2,2)
形状的阵列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.