矩阵索引,每行提取不同的列

Matrix indexing, extracting different columns for each row

底部有小数组的示例。 我有一个尺寸为 MxN (N>100) 的 numpy 数组数据和一个尺寸为 Mx100 的较小数组 A。

数组 A 包含数据数组的列索引。

我想提取 A 中索引给出的所有数据列。 问题是 A 中的索引对于每一行都是不同的。

我试过了

 data[:,A]

但是这个 returns 我是一个 MxMx100 阵列。 我只想要一个 Mx100 阵列。 我可以在 for 循环中执行此操作,但这需要很长时间。 我怎样才能正确地做到这一点?

示例:

data=np.array([[1,2,3],[4,5,6],[7,8,9]])
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
A=np.array([[0,1],[1,2],[0,2]])

我要提取: 第一行:索引 0 和 1。第二行:索引 1 和 2。第三行:索引 0 和 2

想要的结果:

array([[1,2],
[5,6],
[7,9]])

使用broadcasting

>>> data[np.arange(A.shape[0])[:,None], A]

array([[1, 2],
       [5, 6],
       [7, 9]])