argsort()的实际应用是什么

时间:2015-10-10 02:14:00

标签: python arrays numpy

最近我遇到了argsort(),我发现它将返回已排序序列的索引。但我不清楚,如果我们使用它来排序数组,为什么不简单地使用sort( )。

In [77]: import numpy as np

In [79]: arr = np.array([4,5,1,7,3])

In [80]: arr1 = np.sort(arr)

In [81]: arr1
Out[81]: array([1, 3, 4, 5, 7])

In [84]: arr2 = np.argsort(arr)

In [85]: arr2
Out[85]: array([2, 4, 0, 1, 3])

argsort比正常排序有什么好处?我们在哪里可以使用它的返回结果,即排序序列的索引。任何人都知道它在现实世界中的应用。

1 个答案:

答案 0 :(得分:0)

Numpy允许您使用索引数组作为数组的索引:

>>> import numpy as np
>>> arr = np.array([4,5,1,7,3])
>>> arr1 = np.sort(arr)
>>> arr2 = np.argsort(arr)
>>> arr1 = arr[arr2]
>>> arr1 = np.sort(arr)
>>> arr1 == arr[arr2]
array([ True,  True,  True,  True,  True], dtype=bool)

这对于实现一个decorate-sort-undecorate例程很有用,比如Python的本地sort函数,如果你给它一个key函数 - 例如,按 square 每个值而不是您自己的值:

>>> arr = np.array([4,-5,1,-7,3])
>>> arr[np.argsort(arr**2)]
array([ 1,  3,  4, -5, -7])