我有一个数组,我想获取每个元素的顺序。
a=[1.83976,1.57624,1.00528,1.55184]
np.argsort(a)
以上代码返回
array([2, 3, 1, 0], dtype=int64)
但是我想获取每个元素顺序的数组。 例如
[0, 1, 3, 2]
means a[0] is largest number (0th)
a[1] is 1th
a[2] is 3rd
a[3] is 2nd
答案 0 :(得分:0)
我会解释,np.argsort(np.argsort(a))
按照该顺序给出元素,例如1.83976
是数组中的最高值,因此为其分配了最高值3
。我只是从len(a)-1
中减去了这个值就得到了输出。
>>> import numpy as np
>>> a=[1.83976,1.57624,1.00528,1.55184]
>>> np.argsort(a)
array([2, 3, 1, 0])
>>> np.argsort(np.argsort(a))
array([3, 2, 0, 1])
>>> [len(a)-i for i in np.argsort(np.argsort(a))]
[1, 2, 4, 3]
>>> [len(a)-1-i for i in np.argsort(np.argsort(a))]
[0, 1, 3, 2]
>>> np.array([len(a)-1]*len(a))-np.argsort(np.argsort(a))
array([0, 1, 3, 2])
答案 1 :(得分:0)
默认情况下,argsort以升序返回排序元素的索引。当您需要降序排列时,argsort(-a)将为您提供正确的排序索引。要获得元素的排名,您需要再次应用argsort。
a = np.array([1.83976,1.57624,1.00528,1.55184])
indx_sorted = np.argsort(-a)
np.argsort(indx_sorted)
>>> array([0, 1, 3, 2])