我有一个大的(百万)个ID编号数组ids,并且我想找到在targets数组中存在另一个目标数组(ids)的索引。例如,如果

ids = [22, 5, 4, 0, 100]
targets = [5, 0]

然后我想要结果:
>>> [1,3]

如果我对ids数组进行预排序,则很容易使用numpy.searchsorted查找匹配项,例如
>>> ids = np.array([22, 5, 4, 0, 100])
>>> targets = [5, 0]
>>> sort = np.argsort(ids)
>>> ids[sort]
[0,4,5,22,100]
>>> np.searchsorted(ids, targets, sorter=sort)
[2,0]

但是,如何找到反向映射以“取消排序”此结果? IE。可以将[2,0]上的排序条目映射回以前的位置:[1,3]

最佳答案

已经有一些答案可以解决,但是为了清楚起见,您需要做的就是使用sort[rank]

# Setup
ids = np.array([22, 5, 4, 0, 100])
targets = np.array([5, 0])

sort = np.argsort(ids)
rank = np.searchsorted(ids, targets, sorter=sort)
print(sort[rank])
# array([1, 3])

关于python - 使用numpy.searchsorted后查找未排序的索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29636173/

10-13 01:21