複数のnumpy配列を同時にソートする方法【Python】

pythonのnumpy配列をソートする記事のアイキャッチその他

ある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を使うプログラマーです。

コメント