2011-10-26 7 views
7

に従ったが、私はnumpyの配列を有していると言う:numpyのでソート2D - ソート1行及び他の選別

[[4 9 2] 
[5 1 3]] 

私はこのアレイの最下行をソートしたいのですが、一番上の行に従いました私が得るように、並べ替え:

[[9 2 4] 
[1 3 5]] 

私はあなたがソート()関数を使用して、このように並べ替えることができます知っているが、それはリストの入力と出力を必要とします。

アイデア?本当にありがとう!

答えて

12
import numpy as np 
a = np.array([[4,9,2],[5,1,3]]) 
idx = np.argsort(a[1]) 

は今、あなたはあなたのインデックス配列にIDXを使用することができます。

b=a[:,idx] 
+0

恐ろしいを、本当にありがとうございました!その解決策は私が予想していたよりずっと簡単でした。私はnumsortのargsort()の例を読んでいましたが、おそらくこの問題を考えすぎていました。 – woodstock

1

私が考えることができる唯一の(効率的な)ソリューションは、元の配列のコピーが必要です。

import numpy as np 
a = np.array([[4,9,2],[5,1,3]]) 
idx = np.argsort(a[1]) 

だから、そのidxのインデックスが列をソートです。

c = a.copy() 
for i in range(len(idx)): 
    a[:,i] = c[:,idx[i]] 

これはかなり速いはずですが、もちろんメモリを無駄にします。

関連する問題