1. ホーム
  2. python

[解決済み] Python/NumPyを使って、配列を2回ソートすることなく、項目をランク付けする。

2022-08-15 19:32:16

質問

私は数字の配列を持っていて、最初の配列の各項目のランクを表す別の配列を作成したいと思います。 私はPythonとNumPyを使用しています。

例えば、以下のような感じです。

array = [4,2,7,1]
ranks = [2,1,3,0]

私が思いついた最良の方法を紹介します。

array = numpy.array([4,2,7,1])
temp = array.argsort()
ranks = numpy.arange(len(array))[temp.argsort()]

配列を2回ソートすることを避ける、より良い/より高速な方法はありますか?

どのように解決するのですか?

使用方法 アドバンスト インデックス を最後のステップで左側に追加します。

array = numpy.array([4,2,7,1])
temp = array.argsort()
ranks = numpy.empty_like(temp)
ranks[temp] = numpy.arange(len(array))

これにより、最後のステップで順列を反転させることにより、2回ソートすることを回避することができます。