2017-05-06 50 views
1
私は辞書順にソートしたい

配列私は問題を理解numpyの結果抱えている、(インデックス位置を取得する)、しかし:私はドン、例えばnumpyの辞書式順序

>>> a = np.asarray([[1, 1, 1, 2, 1, 2], [2, 1, 2, 3, 1, 0], [1, 2, 3, 3, 2, 2]]) 
>>> a 
array([[1, 1, 1, 2, 1, 2], 
     [2, 1, 2, 3, 1, 0], 
     [1, 2, 3, 3, 2, 2]]) 
>>> np.lexsort(a) 
array([0, 5, 1, 4, 2, 3]) 

」をなぜ[1, 2, 1]a[:,0])がソートインデックス0であり、[1, 1, 2]a[:,1])がインデックス5であるのかを理解していても、[1, 2, 1]よりも甘くなければならないと思っていました。

+2

行列を反転:'シーケンスの最後のキーは、第1ソート順のために使用され、最後から2番目のセカンダリソート順のキーなどがあります。 '。したがって、最初の行には*最小ソート値*があり、最後の行まで続きます。そういうわけで、順序は:最初のcol、次に5番目のcolなどです。 – Divakar

答えて

2

キーの重要度の順番は、期待どおりのものです。オーダー予想を取得する結果に だけnp.lexsort` `上のドキュメントから逆さま

>>> np.lexsort(np.flipud(a)) 
array([1, 4, 0, 2, 5, 3]) 
2

np.lexsortは、しかし、それは考えて順番が列で最後要素は、その前の1以上の優先権を持っているとするようなものである、辞書式順序であなたのの指標を与えます。それであなたの例の列5が列1の前に来る理由です。

[2,0,2] < [1,1,2]2 = 20 < 1のためです。

関連する問題