我有一个多维 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]]])
如何使用 p
获取所需的 m
切片?
最佳答案
Numpy 仅使用您的数组来索引第一个维度。作为一般规则,多维数组的索引应该在元组中。这将使您更接近您想要的:
>>> m[tuple(p)]
array([9, 9])
但是现在你用 1 索引第一个维度两次,用 3 索引第二个维度两次。要用 1 和 3 索引第一个维度,然后也用 1 和 3 索引第二个维度,你可以转置你的数组:
>>> m[tuple(p.T)]
array([ 7, 19])
关于python - 用数组索引多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16260806/