25,188 views
この記事は最終更新から 1831日 が経過しています。
以下のような乱数配列aを作る。
>>> import numpy as np >>> a = np.random.rand(10) >>> a array([ 0.4556755 , 0.82176872, 0.49312231, 0.17689834, 0.96413341, 0.41666999, 0.91981665, 0.26402886, 0.67935056, 0.80891284])
配列要素をソートしたい場合、numpy.sort を使えばよい。
>>> b = np.sort(a) >>> b array([ 0.17689834, 0.26402886, 0.41666999, 0.4556755 , 0.49312231, 0.67935056, 0.80891284, 0.82176872, 0.91981665, 0.96413341])
降順にしたい場合はソート後の配列をフリップする。
フリップは、最終要素[-1]から-1ずつインデックスをずらすことにより実現する。
>>> c = b[-1::-1]
>>> c
array([ 0.96413341, 0.91981665, 0.82176872, 0.80891284, 0.67935056,
0.49312231, 0.4556755 , 0.41666999, 0.26402886, 0.17689834])
本題の ソート後の配列要素インデックスを得るには? は numpy.argsort を使う。
>>> x = np.argsort(a)
>>> x
array([3, 7, 5, 0, 2, 8, 9, 1, 6, 4])
得られたインデックスを使用して、配列要素のソートもできる。
>>> a[x]
array([ 0.17689834, 0.26402886, 0.41666999, 0.4556755 , 0.49312231,
0.67935056, 0.80891284, 0.82176872, 0.91981665, 0.96413341])
>>> b - a[x]
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
MATLABもそうだけど、これができるのがとっても便利。