ノート/ノート

訪問者数 910      最終更新 2015-08-01 (土) 13:39:15

Numpyでのソート

Numpyで、arrayとして、多数のベクトルの集まりを持っているとする。

a = np.array([[1,4],[1,3],[2,2])
a
array([[1, 4],
       [1, 3],
       [2, 2]])

これを、3つの2次元ベクトルと見て、先ずx比較、xが同じならy比較、というようにして ソートしたい。期待する結果は

[1, 3],
[1, 4],
[2, 2]

これは、np.sortでは、axisを0にしても1にしても、ダメである。

そこで、

np.array(sorted(a, key=lambda a_entry: a_entry[0]))

という、numpyでない、元のpythonのsortedを使ってみる。 最後のnp.arrayが必要な理由は、sortedの出力が、

[array([1, 3]), array([1, 4]), array([2, 2])]

のようになってしまうからである。これを、np.arrayでarrayに戻してやると

array([[1, 4],
       [1, 3],
       [2, 2]])

のようになる。

これは、比較のkey指定がa_entry[0]になっているので、これを複数書きたい。1つの方法として、

from operator import itemgetter

np.array(sorted(a, key=itemgetter(0,1)))

とすることができる。itemgetterで0番目と1番目をキーとする、ということらしい。

3次元でやるとすれば、

a = np.array([[3,1,1],[1,4,1],[1,1,7]])

とするとき、

np.array(sorted(a, key=itemgetter(0,1,2)))

でソートすると、キーは0,1,2番目の要素(この順で)であるから、結果は

array([[1, 1, 7],
       [1, 4, 1],
       [3, 1, 1]])

のようになる。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-08-01 (土) 13:39:15 (809d)