2016-05-29 32 views
1

我有實數numpy的2D陣列,例如排序行有效

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]相同大小的索引的矢量:idx=[5, 2, 3, 9]

爲A的每一行,我需要將條目從高到低排序,並提供來自idx的相應元素。例如,在上述情況下,答案應該是:

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

在A中可以有數百萬行。這樣做的最有效方式是什麼?

+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]])