rank
R の関数と同様に、Python でリストのランク ベクトルを計算する効率的な方法を探しています。要素間に関係がない単純なリストでは、並べ替えられたリストのx番目の要素である場合に限り、リストのランク ベクトルの要素iはxになります。ここまでは簡単です。次のコード スニペットでうまくいきます。l
l[i]
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 がこれを達成する方法を既に持っているかどうかはわかりません。その場合はお知らせください。ただし、NumPy がなくても機能するツールを開発しているので、とにかく純粋な Python ソリューションに興味があります。