【发布时间】:2014-02-10 13:40:25
【问题描述】:
我有两个数组,一个是索引对的矩阵,
a = array([[[0,0],[1,1]],[[2,0],[2,1]]], dtype=int)
另一个是在这些索引处访问的数据矩阵
b = array([[1,2,3],[4,5,6],[7,8,9]])
并且我希望能够使用 a 的索引来获取 b 的条目。只是在做:
>>> b[a]
不起作用,因为它为a 中的每个条目提供一行 b,即
array([[[[1,2,3],
[1,2,3]],
[[4,5,6],
[4,5,6]]],
[[[7,8,9],
[1,2,3]],
[[7,8,9],
[4,5,6]]]])
当我想使用a 的最后一个轴中的索引对来给出b 的两个索引时:
array([[1,5],[7,8]])
有没有一种干净的方法可以做到这一点,还是我需要重塑b并以相应的方式组合a的列?
在我的实际问题中,a 有大约 500 万个条目,b 是 100×100,我想避免 for 循环。
【问题讨论】:
-
您似乎在
a周围多了一个括号。a = array([[0,0],[1,1],[2,0],[2,1]], dtype=int)有效吗? -
@JLLagrange 它应该在那里。
a.shape应该是(2,2,2),或更一般地说,(n,m,2)和结果(n,m,1)(=(n,m))。