Python 一个numpy矩阵的索引:每行一个元素

Python 一个numpy矩阵的索引:每行一个元素,python,arrays,numpy,matrix,scientific-computing,Python,Arrays,Numpy,Matrix,Scientific Computing,我有一个二维numpy数组,矩阵,形状为(m,n)。我的实际用例有m~1e5和n~100,但为了有一个简单的最小示例: matrix = np.arange(5*3).reshape((5, 3)) 我有一个整数索引数组idx,形状为(m,),每个条目介于[0,n]之间。这个数组指定应从矩阵的每一行中选择哪一列 因此,我试图从第0行选择第2列,从第1行选择第0列,从第2行选择第2列,从第1行选择第1列,从第4行选择第1列。因此,最终答案应该是: correct_result = np.arra

我有一个二维numpy数组,矩阵,形状为(m,n)。我的实际用例有m~1e5和n~100,但为了有一个简单的最小示例:

matrix = np.arange(5*3).reshape((5, 3))
我有一个整数索引数组idx,形状为(m,),每个条目介于[0,n]之间。这个数组指定应从矩阵的每一行中选择哪一列

因此,我试图从第0行选择第2列,从第1行选择第0列,从第2行选择第2列,从第1行选择第1列,从第4行选择第1列。因此,最终答案应该是:

correct_result = np.array((2, 3, 8, 10, 13))
我尝试了以下方法,这是直观的,但不正确:

incorrect_result = matrix[:, idx]
上面的语法是将idx作为一个奇特的索引数组逐行应用,从而生成另一个形状矩阵(m,n),这不是我想要的

这种类型的索引的正确语法是什么

correct_result = matrix[np.arange(m), idx]
高级索引表达式
矩阵[I,J]
给出的输出使得
输出[n]==矩阵[I[n],J[n]


如果我们想要
output[n]==matrix[n,idx[n]
,那么我们需要
I[n]==n
J[n]==idx[n]
,所以我们需要
I
成为
np.arange(m)
J
to be
idx

谢谢@Divakar,这确实是同一个问题。我不知道为什么在询问之前我的so搜索中没有出现这个问题。显然so上的搜索引擎不是很好。所以,我做的一件事就是谷歌搜索,在关键字中添加
站点:stackoverflow.com
。谢谢你的提示,听起来不错有用!
correct_result = matrix[np.arange(m), idx]