最近,我一直在试验 np.argsort ,我发现了一些奇怪的东西。
如果您运行以下代码,您将得到结果:
functools.wraps
但如果你做了一点改变:
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)
我知道 numpy argsort 的默认方法是 quicksort ,这是一种不稳定的排序算法。但是,有关于上述不同行为的合理解释?这与快速选择枢轴有关吗?如果是这样,为什么?
答案 0 :(得分:2)
我可能错了,因为我没有深入研究它,但似乎numpy使用 introsort 类混合算法求助于插入排序(其中适用于小范围。
猜猜看code应该会给你一个更好的洞察力。查看代码可以遵循的不同路径,SMALL_QUICKSORT
应该是您正在寻找的神奇数字。