【发布时间】:2022-11-13 01:41:08
【问题描述】:
我有一个数组,我需要它的索引,它会对它进行排序。之前的实现在我想重构的循环中使用了pd.sort_values()。为此,我需要使用argsort 来实现它。
这是我尝试过的:
array = np.array([1., 2., 0., 0., 9., 3., 7., 13., 4., 5., 15., 5., 12., 6., 3.,
1., 1., 5., 1., 9., 15., 2., 4., 7., 16., 7., 8., 11., 15., 13., 4., 16., 11.])
# Just for illustration of what I need as output
print(list(pd.Series(array).sort_values(ascending=False, kind="quicksort").index))
# Out: [31, 24, 20, 28, 10, 7, 29, 12, 32, 27, 4, 19, 26, 6, 23, 25, 13, 11, 9, 17, 8, 22, 30, 14, 5, 1, 21, 0, 18, 15, 16, 3, 2]
# I tried:
print(list(array.argsort(kind="quicksort")[::-1]))
print((-array).argsort(kind='quicksort'))
print(array.argsort(kind='quicksort')[-len(array):][::-1])
# Out: [24 31 20 28 10 29 7 12 32 27 4 19 26 25 6 23 13 9 17 11 8 30 22 14 5 21 1 0 15 18 16 3 2 ]
【问题讨论】:
-
用
argsort做任何特别的事情的关键是用你想要排序的值创建一个数组。如果您想要反向排序,则需要反转参数(甚至可能否定值)。
标签: python arrays pandas numpy matrix