3

我有一个多维 NumPy 数组:

In [1]: m = np.arange(1,26).reshape((5,5))

In [2]: m
Out[2]:
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15],
       [16, 17, 18, 19, 20],
       [21, 22, 23, 24, 25]])

和另一个数组p = np.asarray([[1,1],[3,3]])。我想p充当 的索引数组m,即:

m[p]
array([7, 19])

但是我得到:

In [4]: m[p]
Out[4]:
array([[[ 6,  7,  8,  9, 10],
        [ 6,  7,  8,  9, 10]],

       [[16, 17, 18, 19, 20],
        [16, 17, 18, 19, 20]]])

如何获得所需的m使用部分p

4

1 回答 1

4

Numpy 仅使用您的数组来索引第一个维度。作为一般规则,多维数组的索引应该在一个元组中。这将使您更接近您想要的:

>>> m[tuple(p)]
array([9, 9])

但是现在你用 1 索引第一个维度两次,用 3 索引第二个维度。要用 1 和 3 索引第一个维度,然后用 1 和 3 索引第二个维度,你可以转置你的数组:

>>> m[tuple(p.T)]
array([ 7, 19])
于 2013-04-28T09:09:02.430 回答