NumPy数组的返回顺序

时间:2012-03-14 20:51:52

标签: python arrays numpy sorting

我正在尝试返回一个数组,该数组在数组中具有每个值的等级。例如,给定下面的数组:

import numpy as np
arr1 = np.array([4, 5, 3, 1])

我想要返回数组:

array([2, 3, 1, 0])

这样返回数组中的值表示数组的升序(即,返回数组中的值表示哪个是最大的)。使用argsort,我只能说出值应该如何重新排序:

arr1.argsort()
array([3, 2, 0, 1])

如果不清楚,请告诉我。

2 个答案:

答案 0 :(得分:5)

可能有更好的方法,但我总是argsort().argsort()

>>> import numpy as np
>>> a = np.random.random(5)
>>> a
array([ 0.54254555,  0.4547267 ,  0.50008037,  0.20388227,  0.13725801])
>>> a.argsort().argsort()
array([4, 2, 3, 1, 0])

答案 1 :(得分:1)

假设[2,3,0,1]是[2,3,1,0]的拼写错误,你可以使用lexsort

>>> import numpy as np
>>> arr1 = np.array([4,5,3,1])
>>> np.lexsort((np.arange(len(arr1)), arr1.argsort()))
array([2, 3, 1, 0])