假设我有两个数组,大小相同,没有重复数组,数组1中的每个项目都在array2中:
arr1 = np.array([100,200,50,150])
arr2 = np.array([150,200,100,50])
找到索引映射inds的最佳方法是什么,以便arr2 [inds]返回arr1?
我当前的解决方案有效,但我想知道是否有更多numpyish在大型阵列上更有效:
ind21 = map(lambda x:np.abs(x-arr2).argmin(),arr1)
In [57]: arr1,arr2[ind21]
Out[57]: (array([100, 200, 50, 150]), array([100, 200, 50, 150]))
答案 0 :(得分:1)
好的,回答我自己的问题,这非常快:
ind1 = np.argsort(arr1)
indrev1 = np.argsort(ind1)
ind2 = np.argsort(arr2)
ind21 = ind2[indr1]
In [101]: arr1,arr2[ind21]
Out[101]: (array([100, 200, 50, 150]), array([100, 200, 50, 150]))
答案 1 :(得分:0)
numpy_indexed软件包免责声明:我是它的作者)为这个问题提供了一个简单且完全向量化的解决方案:
import numpy_indexed as npi
ind = npi.indices(arr1, arr2)
可能比你的解决方案慢一点,因为npi力求更加通用,而且它没有充分利用你问题的简单结构......虽然总成本将由同样的argsorts支配。场景。