俺言語。

自分にしか理解できない言語で書かれた備忘録

【Python】numpy2次元配列でキーを使ったソートの方法

エクセルの並び替えの様に優先するキー(軸)を指定した並び替えが少しめんどくさい。
なぜそれ用の関数orオプションがないのだろうか…。

方法としては

  1. キーにする軸のみargsortでソート後のインデックスを取り出す
  2. そのインデックスを使ってソートする前の配列から新しい配列を作る
  3. 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]]

って書いたりする。