我正在尋找一種有效的方法來計算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