Numpy argsort不稳定

时间:2018-04-23 13:47:51

标签: python python-3.x sorting numpy quicksort

最近,我一直在试验 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 ,这是一种不稳定的排序算法。但是,有关于上述不同行为的合理解释?这与快速选择枢轴有关吗?如果是这样,为什么?

1 个答案:

答案 0 :(得分:2)

我可能错了,因为我没有深入研究它,但似乎numpy使用 introsort 类混合算法求助于插入排序(其中适用于小范围。

猜猜看code应该会给你一个更好的洞察力。查看代码可以遵循的不同路径,SMALL_QUICKSORT应该是您正在寻找的神奇数字。