Python 给定每行对应的索引,从矩阵中获取对应的元素

Python 给定每行对应的索引,从矩阵中获取对应的元素,python,arrays,numpy,Python,Arrays,Numpy,给定每行的索引,如何返回二维矩阵中的相应元素? 例如,在np.array([[1,2,3,4],[4,5,6,7]])的数组中,我希望看到给定的indxs=np.array([[0,1],[0,1]])的输出。以下是我尝试过的: a= np.array([[1,2,3,4],[4,5,6,7]]) indxs = np.array([[0,1],[0,1]]) #means return the elements located at 0 and 1 for each row #I tried

给定每行的索引,如何返回二维矩阵中的相应元素? 例如,在
np.array([[1,2,3,4],[4,5,6,7]])
的数组中,我希望看到给定的
indxs=np.array([[0,1],[0,1]])
的输出。以下是我尝试过的:

a= np.array([[1,2,3,4],[4,5,6,7]])
indxs = np.array([[0,1],[0,1]]) #means return the elements located at 0 and 1 for each row
#I tried this, but it returns an array with shape (2, 2, 4) 
a[idxs]

获得两倍数组的原因是,当您执行
a[[0,1]]
时,您正在从数组a中选择行0和1,这实际上是整个数组

In[]: a[[0,1]]

Out[]: array([[1, 2, 3, 4],
       [4, 5, 6, 7]])
您可以使用幻灯片获得所需的输出。那将是最简单的方法

a = np.array([[1,2,3,4],[4,5,6,7]])
a[:,0:2]

Out []: array([[1, 2],
               [4, 5]])
如果您仍然对索引感兴趣,还可以让您的输出执行以下操作:

In[]: [list(a[[0],[0,1]]),list(a[[1],[0,1]])]

Out[]: [[1, 2], [4, 5]]
文档为您提供了索引工作原理的非常好的概述

In [120]: indxs = np.array([[0,1],[0,1]])
In [121]: a= np.array([[1,2,3,4],[4,5,6,7]])
     ...: indxs = np.array([[0,1],[0,1]]) #
您需要为第一个维度提供索引,该维度使用
indxs
进行广播

In [122]: a[np.arange(2)[:,None], indxs]
Out[122]: 
array([[1, 2],
       [4, 5]])

indxs
是(2,n),因此需要一个(2,1)数组来给出(2,n)结果

关于整数数组索引的这一节更好。