繁体   English   中英

Numpy 中的二维数组索引二维数组

[英]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->51->42->52->5处的元素,结果形状与ind相同,因此[[5,4][5,5]]

它的每一行都相同,从而产生(3,2,2)形状的阵列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM