2011-11-16 11 views
5

などのnumpyの配列は私がnumpy.arrayを使用して配列に作ったリストソートテーブル

[[0, 3], [5, 1], [2, 1], [4, 5]] 

がありますか?特に、2番目の列を昇順に並べ替え、最初の列を昇順にソートすることで、結びつきを解決したいと考えています。だから私は望みます:

[[2 1] 
[5 1] 
[0 3] 
[4 5]] 

何か助けていただければ幸いです!

答えて

7

あなたはnumpy.lexsort()を使用することができ、具体的にあなたのケースで

import numpy as np 
x = np.array([[0,3],[5,1],[2,1],[4,5]]) 
x[np.lexsort((x[:,0],x[:,1]))] 

出力

array([[2,1],[5,1],[0,3],[4,5]]) 
+0

こんにちは、ソリューションのおかげで。 x [:、0]をx [:: - 1,0]に置き換えると、(最初の列の)2番目のソートの方向を逆にすることができるので、これは最高です。多くの皆さん、ありがとう! – Derek

2

A一度に

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

subarray = a[:,1] # 3,1,1,5 

indices = np.argsort(subarray) # Returns array([1,2,0,3]) 

result = a[indices] 

または、すべて: - このことのNotherの方法、必要なデータのビットをスライスargsortを使用してソートインデックスを取得するには、その後、あなたの元の配列をスライスすることの結果を使用し

a[np.argsort(a[:,1])] 
+2

これは必ずしもタイをソートしません(最初の列は昇順にソートされます)。 – Bruno

+0

True - lexsortはここでより良いオプションに見えます – FredL

1

あなたが(例えば、第二カラム)、あなたのような何かを行うことができる唯一の単一の列を使用してソートしたい場合:

from operator import itemgetter 
a = [[0, 3], [5, 1], [2, 1], [4, 5]] 
a_sorted = sorted(a, key=itemgetter(1)) 

複数のキーがある場合は、numpy.lexsortを使用します() thで指摘されているように他の答え。

+0

私の場合、numpy.array(sorted(a、key = itemgetter(1)))は最も読みやすいオプションです。 – firegurafiku

関連する問題