numpy中数组之间的映射

时间:2013-10-29 00:15:36

标签: python arrays numpy mapping

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

  • originaldata是一个numpy 2D数组,
  • targetdata是另一个numpy 2D数组,
  • mapping是一个在不同位置之间进行映射的数组,因此mapping[x,y]targetdata[x,y]提供了originaldata数据来自for (x,y) in ALLTHEPOINTS: targetdata[x,y]=originaldata[mapping[x,y][0],mapping[x,y][1]] 的坐标对。

到目前为止,我做了类似的事情:

{{1}}

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

有没有办法对此进行矢量化?或者是否存在解决此类操作的numpy函数?

1 个答案:

答案 0 :(得分: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]])