あるnumpy配列を基準として複数のnumpy配列を同じようにソートしたいことがあるかと思います。
これはnumpy.argsort()
を用いることで実現することができます。numpy.argsort()
はソート後のインデックスを返してくれる関数です。
実際に確認してみましょう。
import numpy as np
ary = np.array([3,1,9,4])
idx = np.argsort(ary)
print(idx)
#[1 0 3 2]
#インデックス1、つまり1が一番小さい。次にインデックス0の3が小さい...
このインデックスを用いてソートすることができます。
また、インデックスを取得するのにnumpy.argsort()
を用いるだけなので他のソート対象はlistでも可能です。
それではexampleを見てみましょう。
import numpy as np
#以下のように対応づける
#[1,2,3,4]
#["僕は","pythonを使う","プログラマー","です。"]
ary = np.array([3,1,2,4])
words = ["プログラマー","僕は","pythonを使う","です。"]
idx = np.argsort(ary)
ary = ary[idx]
idx = idx.tolist()
sentence = ""
for i in idx:
sentence += words[i]
print(sentence)
#僕はpythonを使うプログラマーです。
コメント