1. ホーム
  2. python

[解決済み] numpyの配列を効率的に降順でソートする?

2022-04-25 20:29:59

質問

この特定の質問がこれまでなかったことに驚きましたが、私は本当にSOでも、また np.sort .

例えば、整数を保持するランダムなnumpy配列があるとする。

> temp = np.random.randint(1,10, 10)    
> temp
array([2, 4, 7, 4, 2, 2, 7, 6, 4, 4])

ソートすると、デフォルトで昇順になりますね。

> np.sort(temp)
array([2, 2, 2, 4, 4, 4, 4, 6, 7, 7])

でソートされるようにしたいのですが、解答は 降順 の順番になります。

今、私はいつでもできることを知っています。

reverse_order = np.sort(temp)[::-1]

が、この最後の文は 効率的 ? 昇順でコピーを作成し、このコピーを反転させて逆順の結果を得るのでは?もし本当にそうだとしたら、効率的な代替手段があるのでしょうか?それは、以下のように見えません。 np.sort は、逆順にするためにソート操作の比較の符号を変更するためのパラメータを受け付けます。

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

temp[::-1].sort() は配列をその場でソートするのに対し np.sort(temp)[::-1] は新しい配列を作成します。

In [25]: temp = np.random.randint(1,10, 10)

In [26]: temp
Out[26]: array([5, 2, 7, 4, 4, 2, 8, 6, 4, 4])

In [27]: id(temp)
Out[27]: 139962713524944

In [28]: temp[::-1].sort()

In [29]: temp
Out[29]: array([8, 7, 6, 5, 4, 4, 4, 4, 2, 2])

In [30]: id(temp)
Out[30]: 139962713524944