此问题已经在这里有了答案:
我有一个二维数组:
x = np.array([[4, 5, 6],
[7, 8, 9]])
和另一个带有索引的项:
a = np.array([[0, 1],
[1, 2]])
我如何使用a中的每一行中的索引来切片x的每一行,而不使用循环来获得:
[[4, 5]
[8, 9]]
尝试一下:
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))
您可以使用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]])
从技术上讲,我知道这是一个循环,但是您可以通过列表理解一行来完成。
print(np.array([x[i][a[i]] for i in range(0, x.shape[0])]))