![]() |
ノート/python/numpyいろいろhttps://pepper.is.sci.toho-u.ac.jp:443/pepper/index.php?%A5%CE%A1%BC%A5%C8%2Fpython%2Fnumpy%A4%A4%A4%ED%A4%A4%A4%ED |
![]() |
訪問者数 1487 最終更新 2015-08-01 (土) 13:39:15
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]])
のようになる。