用Numpy中的2d数组索引2d数组

问题描述 投票:1回答:1

我有一个困扰我几天的问题。假设我们在Numpy中定义一个2d数组:

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]]])

同样,这很有意义-对于索引2d数组中的每一行,我们都会收到一个2d数组,它们代表原始2d数组x中的对应行。

但是,如果我们运行x[:,ind],则会收到下一个数组:

array([[[2, 1],
        [2, 2]],

       [[5, 4],
        [5, 5]],

       [[8, 7],
        [8, 8]]])

我不理解此输出,因为它在索引行中返回特定项目,但不返回完整行。我想,就像x[:,ind]是1d数组的情况一样,我们将收到2d数组,其中包括原始x数组中的原始列。

python arrays numpy
1个回答
0
投票

在最后一种情况下使用索引数组:

print(ind)
array([[2, 1],
       [2, 2]])

因为ind是形状为2D(2,2)数组,并且您沿着第一个轴取了一个完整的切片,所以使用ind您将沿着A的每一行的列进行索引。因此,例如,通过用[3, 4, 5]索引第二行ind,您将再次获得索引为2->51->42->52->5的元素,其结果形状与[ C0],因此ind

其每一行都是相同的,从而得到[[5,4][5,5]]形状的数组。

© www.soinside.com 2019 - 2024. All rights reserved.