有效地排列numpy矩阵行

时间:2016-05-29 14:13:29

标签: python numpy

我有一个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中可能有数百万行。最有效的方法是什么?

1 个答案:

答案 0 :(得分: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]])