2016-05-29 8 views
1

Iは、例えばソート行を効率的

A= 
np.array(
[[0.1, 0.01, 0.4, 0.9], 
[0.0005, -0.2, -0.1, 0.6], 
[-0.3, -0.5, 0.2, 0.9]]) 

A.shape[1]の同じサイズのインデックスのベクトルに対して、実数のnumpyの2Dアレイを有しますエントリを高位から低位にソートし、対応する要素をidxから提供する必要があります。例えば、答え上記の場合には次のようになります。A.内の行の

np.array([[9, 3, 5, 2], [9, 5, 3, 2], [9, 3, 5, 2]]) 

が存在することができ、何百万、これを行うための最も効率的な方法は何ですか?

+0

これではありません「列で並べ替える」質問の複製。 – hpaulj

答えて

3

次に、あなたの期待される出力を得るために、単純なインデックスを使用して、ソートされたモードであなたの配列のインデックスを取得し、減モードの指標を得るためにそれを逆にnp.argsort()を使用することができます。

>>> A.argsort() 
array([[1, 0, 2, 3], 
     [1, 2, 0, 3], 
     [1, 0, 2, 3]]) 
>>> idx=np.array([5, 2, 3, 9]) 

>>> indices = A.argsort()[:,::-1] 
>>> 
>>> idx[indices] 
array([[9, 3, 5, 2], 
     [9, 5, 3, 2], 
     [9, 3, 5, 2]])