Python/NumPy を使用して配列内の項目をランク付けし、配列を 2 回ソートしない 質問する

Python/NumPy を使用して配列内の項目をランク付けし、配列を 2 回ソートしない 質問する

数値の配列があり、最初の配列内の各項目の順位を表す別の配列を作成したいと思います。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 回ソートするのを避ける、より良い/より高速な方法はありますか?

ベストアンサー1

argsort を 2 回使用して、最初に配列の順序を取得し、次にランキングを取得します。

array = numpy.array([4,2,7,1])
order = array.argsort()
ranks = order.argsort()

2D (またはそれ以上の次元) 配列を扱う場合は、正しい軸で順序付けるために、必ず argsort に軸引数を渡してください。

おすすめ記事