3

我在一个数组中有一些数据,我想映射到另一个数组,给定一组对应关系:

  • originaldata是一个 numpy 二维数组,
  • targetdata是另一个 numpy 二维数组,
  • mapping是一个在位置之间映射的数组,所以mapping[x,y]给了我一对数据targetdata[x,y]来自 in的坐标originaldata

到目前为止,我做了这样的事情:

for (x,y) in ALLTHEPOINTS:
    targetdata[x,y]=originaldata[mapping[x,y][0],mapping[x,y][1]]

...我怀疑这是非常低效的。

有什么办法可以矢量化吗?或者是否有任何 numpy 函数可以解决这种类型的操作?

4

1 回答 1

6

这就是花哨的索引的用途:

targetdata = originaldata[mapping[..., 0], mapping[..., 1]]

举个简单的例子:

>>> original_data = np.arange(6).reshape(2, 3)
>>> original_data
array([[0, 1, 2],
       [3, 4, 5]])
>>> mapping = np.array([[[1,0], [1, 1], [1, 2]],   # swap rows and reverse
...                     [[0, 2], [0, 1], [0, 0]]]) # the second one
>>> original_data[mapping[..., 0], mapping[..., 1]]
array([[3, 4, 5],
       [2, 1, 0]])
于 2013-10-29T01:09:16.487 回答