cha*_*.ct 3 python arrays mapping numpy
给定一系列对应关系,我想在一个数组中有一些数据要映射到另一个数组:
originaldata 是一个numpy二维数组,targetdata 是另一个numpy二维数组,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]]
Run Code Online (Sandbox Code Playgroud)
......我怀疑这是非常低效的.
有没有办法对此进行矢量化?或者是否有任何numpy函数来解决这种类型的操作?
这就是花哨的索引:
targetdata = originaldata[mapping[..., 0], mapping[..., 1]]
Run Code Online (Sandbox Code Playgroud)
举个简单的例子:
>>> 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]])
Run Code Online (Sandbox Code Playgroud)