我有一个大的(数百万)ID号数组ids
,我想找到ids
数组中另一个目标数组(targets
)所在的索引。例如,如果
ids = [22, 5, 4, 0, 100]
targets = [5, 0]
然后我想要结果:
^{pr2}$如果我对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]
但是我如何找到这个结果的反向映射呢?一、 将[2,0]
处排序的条目映射回它们之前的位置:[1,3]
。在
你能这么做吗?在
或者:
^{pr2}$两者都给出:
已经有一些答案围绕着这个问题,但要想弄清楚,您需要做的就是使用
sort[rank]
。在我想我想出了个办法。在
我们可以构造一个'cipher'或排序:
key = numpy.arange(len(ids))
将初始排序器应用于该密钥,然后给出反向映射:revsort = key[np.argsort(ids)]
编辑:正如@birico指出的,
key[sort]
与sort
本身相同!在相关问题 更多 >
编程相关推荐