如何反转argsort的结果,将排序数组的索引映射回原未排序数组
求解思路与实现
核心原理
numpy的argsort()返回的索引数组p的定义是:排序后数组b的第i个元素,在原数组a中的索引为p[i],即等式b[i] = a[p[i]]恒成立。
最简实现
你需要的af可以直接通过对p按f索引取值得到:
import numpy as np # 原有变量定义 a = np.array([83, 75, 60, 80, 20, 6, 37, 81, 7, 21]) p = a.argsort() f = [0, 1, 2, 3, 6, 7] # 计算目标索引 af = p[f] # 验证输出:[5 8 4 9 1 3],和预期结果完全匹配 print(af)
说明
该方法不需要额外生成逆排列数组,时间复杂度和空间复杂度都是O(len(f)),是目前最高效的实现方式。
内容的提问来源于stack exchange,提问作者Alasdair
相关产品推荐
相关产品推荐

