【Python】numpy2次元配列でキーを使ったソートの方法
エクセルの並び替えの様に優先するキー(軸)を指定した並び替えが少しめんどくさい。
なぜそれ用の関数orオプションがないのだろうか…。
方法としては
- キーにする軸のみargsortでソート後のインデックスを取り出す
- そのインデックスを使ってソートする前の配列から新しい配列を作る
- np.c_で配列を結合
具体的な方法は
import numpy as np # 100x2の配列を作成 a = np.random.rand(100,2) # キー軸をソートした後のインデックスを取り出す ind = np.argsort(a[:,0]) # ソート後のインデックスで元の配列を並び替え new_a0 = a[ind, 0] new_a1 = a[ind, 1] # 配列を結合 new_aa = np.c_[new_a0, new_a1]
実際は全て一行にまとめて
new_aa = np.r_[a[np.argsort(a[:, 0]), 0], a[np.argsort(a[:, 0]), 1]]
って書いたりする。