我有一个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 :(得分: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]])