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]])