最近,我一直在尝试np.argsort,但我发现有些奇怪。
如果运行以下代码,将得到结果:
In [0]: np.argsort([3]*16)
Out[0]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
dtype=int64)
但是,如果您进行一些更改:
In [1]: np.argsort([3]*17)
Out[1]:
array([ 0, 14, 13, 12, 11, 10, 9, 15, 8, 6, 5, 4, 3, 2, 1, 7, 16],
dtype=int64)
我知道numpy argsort的默认方法是quicksort,这是一种不稳定的排序算法。但是,上面有关于不同行为的合理解释吗?这是否与quicksort的支点选择有关?如果是这样,为什么?
最佳答案
我可能是错的,因为我没有对它进行深入研究,但是numpy似乎使用了introsort混合算法,对小范围使用了插入排序(稳定)。
猜猜看code应该可以为您提供更好的见解。查看代码可以遵循的不同路径,SMALL_QUICKSORT
应该是您要查找的幻数。
关于python - numpy argsort不稳定性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49982804/