2017-12-24 28 views
0

これは簡単には簡単ですが、少し苦労しています。2D NumPy配列を列の1つで並べ替えます。

array([[1. , 3.9], 
     [2. , 3.8], 
     ... , 
     [20. , 1.5]]) 

np.sortのように動作していないよう次のように

array([[ 5.  , 3.40166205], 
    [ 10.  , 2.72778882], 
    [ 15.  , 2.31881804], 
    [ 20.  , 2.50643777], 
    [ 1.  , 3.94076063], 
    [ 2.  , 3.80598599], 
    [ 3.  , 3.67121134], 
    [ 6.  , 3.2668874 ], 
    [ 7.  , 3.13211276], 
    [ 8.  , 2.99733811], 
    [ 9.  , 2.86256347], 
    [ 11.  , 2.64599467], 
    [ 12.  , 2.56420051], 
    [ 13.  , 2.48240635], 
    [ 14.  , 2.4006122 ], 
    [ 16.  , 1.8280531 ], 
    [ 17.  , 1.74625894], 
    [ 18.  , 1.66446479], 
    [ 19.  , 1.58267063], 
    [ 20.  , 1.50087647]]) 

を次のように私は、データ構造を持っていると私は、最初の列だけでそれをソートしたい...ので、それを注文していますアレイをフラットな構造に移動します。私も使用しましたitemgetter

from operator import itemgetter 
sorted(data, key=itemgetter(1)) 

しかし、これは私に探している出力を与えるものではありません。

ヘルプありがとうございました!

答えて

2

これは一般的なnumpyイディオムです。 argsort(最初の列にある)+ numpyのインデックスはここをクリックしてください。

x[x[:, 0].argsort()] 

array([[ 1.  , 3.94076063], 
     [ 2.  , 3.80598599], 
     [ 3.  , 3.67121134], 
     [ 5.  , 3.40166205], 
     [ 6.  , 3.2668874 ], 
     [ 7.  , 3.13211276], 
     [ 8.  , 2.99733811], 
     [ 9.  , 2.86256347], 
     [ 10.  , 2.72778882], 
     [ 11.  , 2.64599467], 
     [ 12.  , 2.56420051], 
     [ 13.  , 2.48240635], 
     [ 14.  , 2.4006122 ], 
     [ 15.  , 2.31881804], 
     [ 16.  , 1.8280531 ], 
     [ 17.  , 1.74625894], 
     [ 18.  , 1.66446479], 
     [ 19.  , 1.58267063], 
     [ 20.  , 2.50643777], 
     [ 20.  , 1.50087647]]) 
関連する問題