最近我遇到了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比正常排序有什么好处?我们在哪里可以使用它的返回结果,即排序序列的索引。任何人都知道它在现实世界中的应用。
答案 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])