python - 使用 numpy.searchsorted 后查找未排序的索引

标签 python algorithm sorting search numpy

我有一个很大(数百万)个 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/

相关文章:

Python Multiprocessing.Process 如何重用一个进程?

image - 查找相似字符串的索引策略

python - 为 MS-SQL 创建不区分大小写的 SQLAlchemy 查询

c# - 三角形存储为数组。每层的高度和长度?

python - 排列:返回第k个排列

sorting - Elo 评级系统的匹配数

r - 使用 ggplot2 根据其大小(即数值)对条形图进行排序

sorting - Grails排序让我很难受

python - 如何在 matplotlib 中绘制双对数直方图

python - 如何找到理想的并行进程数以使用 python 多处理运行?