【发布时间】:2019-06-20 16:29:25
【问题描述】:
我知道这个问题已经被问了一百次了,但答案似乎总是“使用 numpy 的 argsort”。但要么我误解了大多数人在问什么,要么答案对这个问题不正确。无论如何,我希望获得列表升序的索引。措辞令人困惑,例如,给定一个列表[4, 2, 1, 3],我希望得到一个返回列表[3, 1, 0, 2]。最小的项目是1,所以它得到索引0,最大的项目是4,所以它得到索引3。在我看来,argsort 似乎经常被建议,但它似乎并没有这样做。
from numpy import argsort
l = [4, 2, 1, 3]
print(argsort(l))
# [2, 1, 3, 0]
# Expected [3, 1, 0, 2]
显然 argsort 正在做其他事情,那么它实际上在做什么,它与预期的行为有何相似之处,因此经常(错误地)建议它?而且,更重要的是,我怎样才能得到想要的输出?
【问题讨论】:
-
Docs say 返回对数组进行排序的索引。
-
@KeyurPotdar 没错,但你会期待
[3, 1, 0, 2],不是吗? -
否 - 它会将 索引 返回到原始列表中,因此如果您按照应用于原始列表的顺序使用它们,则列表将被排序:
[ l[ 2 ], l[ 1 ], l[ 3 ], l[ 0 ]]是排序列表 -
不,[2, 1, 3, 0] 指向 l[2], l[1], l[3], l[0] 即 [1, 2, 3, 4 ]
-
试试
argsort(argsort(l))
标签: python python-3.x list numpy sorting