我正在寻找一种有效的方法来计算Python中列表的列向量,类似于R的rank
函数。在一个简单的列表与所述元件之间没有联系,元件我列表l
的秩向量的应X当且仅当是l[i]
在排序列表中的X个元件。这是简单的,到目前为止,下面的代码片段的伎俩:有效的方法来计算Python列表中的列表向量
def rank_simple(vector):
return sorted(range(len(vector)), key=vector.__getitem__)
事情变得复杂,但是,如果原来的列表中有关系(具有相同的价值,即多个元素)。在这种情况下,具有相同价值的所有要素应该具有相同的等级,这是使用上述朴素方法获得的等级的平均值。所以,例如,如果我有[1, 2, 3, 3, 3, 4, 5]
,天真的排名给了我[0, 1, 2, 3, 4, 5, 6]
,但我想要的是[0, 1, 3, 3, 3, 5, 6]
。哪一个是在Python中执行此操作的最有效方法?
脚注:我不知道NumPy是否已经有一个方法来实现这一点,如果是这样,请让我知道,但无论如何,我会对纯Python解决方案感兴趣,因为我正在开发一个不带NumPy的工具。
你检查过'numpy.argsort(vector)'吗? – 2016-10-03 07:55:19