2017-01-23 9 views
1

私はを徐々にしたいと思います。のように配列を並べ替えることができます。例:「ソートCOLUMN2によって次いで、カラム1 でソートなどCOLUMN3によってその後ソートなど。」:アレイをプログレッシブに並べ替える

randomMatrix = np.asarray(
[[0, 1, 0, 1, 0, 0, 2, 0, 1, 0], 
[1, 0, 0, 0, 0, 1, 0, 0, 1, 2], 
[1, 1, 0, 0, 2, 0, 0, 1, 0, 0]]) 

私がしたいのですが私たちができるのは次のようなものです:

sortedMatrix = np.asarray(
[[0, 1, 2, 0, 1, 0, 0, 1, 0, 0], 
[0, 0, 0, 1, 1, 2, 0, 0, 1, 0], 
[0, 0, 0, 0, 0, 0, 1, 1, 1, 2]]) 

どうすればいいですか? This answerはlexsortを使用することをお勧めしますが、私は私が得るかとき:あなたが列でソートされた答えは、異なる行でソートされている

randomMatrix[np.lexsort(randomMatrix.T[::-1])] 
array([[0, 1, 0, 1, 0, 0, 2, 0, 1, 0], 
     [1, 0, 0, 0, 0, 1, 0, 0, 1, 2], 
     [1, 1, 0, 0, 2, 0, 0, 1, 0, 0]]) 
+0

あなたは何を並べ替えているのかよく分かりません。あなたは "配列"を持っていない、あなたはそれらの3つを持っています。また、行全体をソートする場合、その中の要素を再配置することはできません。 –

答えて

2

、答えの小さな適応はあなたのために働く必要があります。

ドキュメントからも
randomMatrix[:, np.lexsort(randomMatrix)]  # no need to transpose here but the sorting 
               # index has to be applied to the second axis 

# array([[0, 1, 2, 0, 1, 0, 0, 1, 0, 0], 
#  [0, 0, 0, 1, 1, 2, 0, 0, 1, 0], 
#  [0, 0, 0, 0, 0, 0, 1, 1, 1, 2]]) 

2Dアレイはキー引数のために提供されている場合は、行のSは最後の行が一次区分キーとなり、第二行二次選別鍵となるので、ここで最後 行に従ってソートされたキーとソートとして解釈 、第二の最後の行等

あります最初の行が最後のソートキーになります。実際にソート処理を行うときは、安定したソートアルゴリズムでソート処理が最初の行で最初に実行され、2行目と1次ソートキーが最終段階でソートされます。一緒に組み合わせると、np.lexsortはソート順を与える整数インデックスを返します。この並べ替え順序を行列のすべての行に適用すると、目的の出力が得られます。

関連する問題