[[ノート/ノート]]~

訪問者数 &counter();      最終更新 &lastmod();

***Numpyでのソート [#wc6ae5a4]

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