Python numpy,按1d索引数组选择行中的元素

Python numpy,按1d索引数组选择行中的元素,python,numpy,Python,Numpy,让我们用正方形数组,n*n。例如,n=3,数组如下: arr = array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) 让我们在每一行中有一个索引数组。例如: myidx=array([1, 2, 1], dtype=int64) 我想得到: [1,5,7] 因为在[0,1,2]行中获取索引为1的元素,在[3,4,5]行中获取索引为2的元素,在[6,7,8]行中获取索引为1的元素 我很困惑,不能用标准numpy索引以这种方式获取元素。 谢谢你的回答。没

让我们用正方形数组,n*n。例如,n=3,数组如下:

arr = array([[0, 1, 2],
   [3, 4, 5],
   [6, 7, 8]])
让我们在每一行中有一个索引数组。例如:

myidx=array([1, 2, 1], dtype=int64)
我想得到:

[1,5,7]

因为在[0,1,2]行中获取索引为1的元素,在[3,4,5]行中获取索引为2的元素,在[6,7,8]行中获取索引为1的元素

我很困惑,不能用标准numpy索引以这种方式获取元素。
谢谢你的回答。

没有真正漂亮的方法,但这正是你想要的:)


实现此目标的更简单方法是使用numpy函数:

numpy.choose(myidx, arr.transpose())

我很确定有更好的方法,但首先:
numpy.array([arr[I,j]表示枚举(myidx)中的(I,j)])
这并不有趣。我想使用清晰的numpy索引:)酷!这真的很漂亮,不要怀疑@QtRoS:numpy切片支持多个维度,因此
arange()
生成
x
索引,
myidx
包含
y
索引。所以它是这样切片的:
arr[x\u idx,y\u idx]
numpy.choose(myidx, arr.transpose())