我正在尝试返回一个数组,该数组在数组中具有每个值的等级。例如,给定下面的数组:
import numpy as np
arr1 = np.array([4, 5, 3, 1])
我想要返回数组:
array([2, 3, 1, 0])
这样返回数组中的值表示数组的升序(即,返回数组中的值表示哪个是最大的)。使用argsort,我只能说出值应该如何重新排序:
arr1.argsort()
array([3, 2, 0, 1])
如果不清楚,请告诉我。
答案 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])