numpy,按一维索引数组选择行中的元素

4 投票
2 回答
3879 浏览
提问于 2025-04-20 14:41

假设我们有一个正方形的数组,大小是 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 索引方式来这样取元素。谢谢你的回答。

2 个回答

1

更简单的方法是使用choose这个numpy函数:

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

没有特别好看的方法,不过这个可以满足你的需求 :)

In [1]: from numpy import *

In [2]: arr = array([[0, 1, 2],
   [3, 4, 5],
   [6, 7, 8]])

In [3]: myidx = array([1, 2, 1], dtype=int64)

In [4]: arr[arange(len(myidx)), myidx]
Out[4]: array([1, 5, 7])

撰写回答