为两个数组创建索引映射

时间:2016-04-14 18:21:16

标签: arrays numpy

假设我有两个数组,大小相同,没有重复数组,数组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]))

2 个答案:

答案 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支配。场景。