我有一个3D的numpy数组data
和另一个索引数组pos
(一个索引本身就是一个numpy数组,这使得后面的数组成为一个2D数组):
import numpy as np
data = np.arange(8).reshape(2, 2, -1)
#array([[[0, 1],
# [2, 3]],
#
# [[4, 5],
# [6, 7]]])
pos = np.array([[1, 1, 0], [0, 1, 0], [1, 0, 0]])
#array([[1, 1, 0],
# [0, 1, 0],
# [1, 0, 0]])
我希望能够使用pos
中的索引来选择和/或改变data
中的元素。我可以使用for
循环或列表推导来进行选择:
[data[tuple(i)] for i in pos]
#[6, 2, 4]
data[[i for i in pos.T]]
#array([6, 2, 4])
但这似乎不是numpy的方式。是否有一种向量化的numpy解决方案来解决这个问题?