我们说我有一堆要排序的对象,其中一些具有相同的排序标准。我可以确定numpy.argsort()
每次会产生相同的回报吗?
例如,如果我致电argsort([0,0,1])
,它会返回:
[0,1,2]
[1,0,2]
取决于?
答案 0 :(得分:6)
numpy.sort()
function(从numpy.argsort()
page链接)
排序是否稳定取决于您选择的排序算法。默认使用quicksort
,快速排序不稳定排序。如果必须具有稳定的排序,请改为使用kind='mergesort'
:
kind speed worst case work space stable
‘quicksort’ 1 O(n^2) 0 no
‘mergesort’ 2 O(n*log(n)) ~n/2 yes
‘heapsort’ 3 O(n*log(n)) 0 no
对于特定的示例,quicksort返回[0, 1, 2]
,mergesort也是如此。 Heapsort返回[1, 0, 2]
代替:
>>> from numpy import argsort
>>> argsort([0,0,1])
array([0, 1, 2])
>>> argsort([0,0,1], kind='mergesort')
array([0, 1, 2])
>>> argsort([0,0,1], kind='heapsort')
array([1, 0, 2])
但是,给定相同的输入,每个排序算法将再次生成相同的输出。您不会随机查看使用给定算法在运行之间交换的1
和0
,即使它是不稳定的。不稳定性并不意味着随机性,它只是意味着具有相同排序键的值的输入顺序可能最终被交换。交换值时完全是确定性的。
另请参阅Wikipedia关于排序算法的文章的stability section。