如何将多维数组与另一个多维数组切片? [重复]

问题描述 投票:0回答:3

此问题已经在这里有了答案:

我有一个二维数组:

x = np.array([[4, 5, 6],
              [7, 8, 9]])

和另一个带有索引的项:

a = np.array([[0, 1],
              [1, 2]])

我如何使用a中的每一行中的索引来切片x的每一行,而不使用循环来获得:

[[4, 5]
 [8, 9]]
python arrays python-3.x numpy slice
3个回答
2
投票

尝试一下:

import numpy as np
x = np.array([[4, 5, 6],
              [7, 8, 9]])
a = np.array([[0, 1],
              [1, 2]])
print(np.take_along_axis(x,a,1))

0
投票

您可以使用numpy.take_along_axis

np.take_along_axis(x,a,1)
# array([[4, 5],
#        [8, 9]])

或手动添加第一个坐标(适用广播)

x[np.c_[:2],a]
# array([[4, 5],
#        [8, 9]])

0
投票

从技术上讲,我知道这是一个循环,但是您可以通过列表理解一行来完成。

print(np.array([x[i][a[i]] for i in range(0, x.shape[0])]))
© www.soinside.com 2019 - 2024. All rights reserved.