使用另一个numpy数组索引numpy数组

48 投票
3 回答
49347 浏览
提问于 2025-04-16 14:51

假设我有

a = array([[1, 2],
           [3, 4]])

还有

b = array([1,1])

我想在索引a中使用b,也就是说,我想做a[b],希望得到4,而不是[[3, 4], [3, 4]]

我可能可以这样做

a[tuple(b)]

有没有更好的方法呢?

谢谢

3 个回答

2

上面的说法是对的。不过,如果你看到这样的错误:

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

那么可能是你的索引数组是浮点类型的。你可以把它改成下面这样:

arr[tuple(a.astype(int))]
22

假设你想要访问一个叫做 a 的向量中的一部分,这部分的索引对存储在另一个叫 b 的地方,像这样:

b = array([[0, 0],
       ...
       [1, 1]])

你可以这样做:

a[b[:,0], b[:,1]]

如果你只有一对索引,那么可以用 a[b[0],b[1]] 来表示,但我觉得用 tuple 的方式更容易理解,所以更推荐这种写法。

52

根据NumPy教程,正确的做法是:

a[tuple(b)]

撰写回答