np.argsort() 的奇怪/错误输出

Hen*_*ing 3 python numpy

我正在使用 numpy 和 argsort,同时遇到argsort 的奇怪(?)行为:

>>> array = [[0, 1, 2, 3, 4, 5], 
             [444, 4, 8, 3, 1, 10], 
             [2, 5, 8, 999, 1, 4]]
>>> np.argsort(array, axis=0)

array([[0, 0, 0, 0, 1, 2],
       [2, 1, 1, 1, 2, 0],
       [1, 2, 2, 2, 0, 1]], dtype=int64)
Run Code Online (Sandbox Code Playgroud)

每个列表的前 4 个值对我来说非常清楚 -argsort正确地完成工作。但最后两个值非常令人困惑,因为它对值的排序有点错误。
的输出不应该argsort是:

array([[0, 0, 0, 0, 2, 1],
       [2, 1, 1, 1, 0, 2],
       [1, 2, 2, 2, 1, 0]], dtype=int64)
Run Code Online (Sandbox Code Playgroud)

Mad*_*ist 6

我认为问题出在你认为argsort输出的内容上。让我们关注一个更简单的一维示例:

 arr = np.array([5, 10, 4])
Run Code Online (Sandbox Code Playgroud)

的结果np.argsort将是原始数组中用于对元素进行排序的索引:

[2, 0, 1]
Run Code Online (Sandbox Code Playgroud)

让我们看看实际的排序值是什么,以了解原因:

[
     4,  # at index 2 in the original array
     5,  # at index 0 in the original array
    10,  # at index 1 in the original array
]
Run Code Online (Sandbox Code Playgroud)

看起来您正在想象逆运算,其中argsort将告诉您每个元素将移动到输出中的哪个索引。argsort您可以通过应用的结果来获得这些索引argsort