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

47
假设我有:
a = array([[1, 2],
           [3, 4]])

并且。
b = array([1,1])

我想在索引a中使用b,即执行a[b]并获得4,而不是[[3, 4], [3, 4]]

我可能可以这样做:

a[tuple(b)]

有更好的方法吗?

谢谢。


我不认为这是个问题。你为什么认为a[tuple(b)]不好? - linjunhalida
3个回答

51

21

假设您想通过 b 中存储的 n 个索引对访问 a 的子向量,方法如下:

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

可以按照以下步骤完成:

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

对于单个索引向量,这会变成 a[b[0],b[1]],但我想使用元组的方法更易于阅读,因此更可取。


4
哪个更快,我在想呢?tuple() 会创建一个副本,而上面的视图则不会? - Terry Brown

2
上述内容是正确的。但是,如果您看到以下错误消息:
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

您可能会有浮点型的索引数组。将其更改为以下内容:
arr[tuple(a.astype(int))]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接