2016-05-29 33 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]])