繁体   English   中英

如何在Python中获取原始列表的排序列表的索引?

[英]How to get the index of the sorted list for the original list in Python?

numpy的argsort函数返回排序列表的原始索引。 现在我想要原始列表的排序列表的索引。 是否有功能或优雅的方式来做到这一点?

例如:

>>> import numpy as np
>>> a = np.array([2, 8 , 5, 6])
>>> np.argsort(a)
array([0, 2, 3, 1])
>>> function(a)
array([0, 3, 1, 2])

你总是可以两次调用argsort

>>> a.argsort().argsort()
array([0, 3, 1, 2])

据我所知,NumPy中没有“双argsort”功能,但将argsort两次应用于数组是计算值的等级的常用方法(参见此处 )。

虽然双argsort技巧有效,但效率不高。 使用花式索引可以获得更好的性能:

>>> argsort = a.argsort()
>>> rev_argsort = np.empty(argsort.shape, dtype=np.intp)
>>> rev_argsort[argsort] = np.arange(len(a))
>>> rev_argsort
array([0, 3, 1, 2])

它更冗长,但它具有线性复杂性,而不是argsort的线性复杂性。 在实践中,这意味着,对于足够大的阵列中,上面的代码将运行两次作为双快argsort ,因为创建和填充时间rev_argsort将针对所述第一可忽略argsort

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM