python - Numpy:使用 2D 索引数组访问 2D 数组

标签 python arrays numpy

我有两个数组,一个是索引对矩阵,

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]])

是否有一种干净的方法可以做到这一点,或者我是否需要 reshape b 并以相应的方式组合 a 的列?

在我的实际问题中,a 有大约 500 万个条目,b 是 100×100,我想避免 for 循环。

最佳答案

实际上,这有效:

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

给出 array([[1, 5], [7, 8]]).

关于python - Numpy:使用 2D 索引数组访问 2D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21678806/

相关文章:

Python 字符串模板 - 使用百分比分隔符

javascript - 如果使用带有箭头函数的 .find 方法数组为空而不是未定义,如何返回 'null'?

python - 从数组末尾取消填充全零行

python - 如何将 (dtype=object) numpy 数组值设置为 Python 列表,而不用 numpy 将列表解释为值列表?

python - 如何使用vtk选择直线上的点?

python - 如何获取数字列表作为输入并计算总和?

python - 使用 Splinter + PhantomJS (Python) 访问表单

c++ - 如何将 STL vector 矩阵转换为二维数组矩阵(或一维数组)

java - 为什么设置数组 A 值的行会重置我在数组 B 中的值?

python-3.x - TypeError : ufunc 'isfinite' not supported for the input types, 并且输入无法安全地强制转换为任何支持的类型