argsort获取每个元素的顺序

时间:2019-04-05 15:14:51

标签: python numpy

我有一个数组,我想获取每个元素的顺序。

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

2 个答案:

答案 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])