numpyのarray#sortの挙動が想定外だった件

numpyのsortは、特に2次元(以上)の時に「リストのリスト」のような気持ちでsortすると「リストの中の各々のリストがソートされる」という挙動をするのでハマる

>>> x = [[6, 5], [4, 3], [2, 1]]
>>> y = array(x)
>>> x.sort()
>>> x
[[2, 1], [4, 3], [6, 5]]
>>> y.sort()
>>> y
array([[5, 6],
       [3, 4],
       [1, 2]])

numpyのsortは引数に「どの軸についてソートするか」を指定できるが、それを省略した場合のデフォルト値が「-1」つまり「一番内側のリストを個別にソートせよ」相当になっている。普通のリストと同じソートがしたければy.sort(0)する必要がある。

>>> y = array([[6, 5], [4, 3], [2, 1]])
>>> y.sort(0)
>>> y
array([[2, 1],
       [4, 3],
       [6, 5]])