【问题标题】:Numpy argsort instabilityNumpy argsort 不稳定性
【发布时间】:2018-10-03 14:25:08
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我可能错了,因为我没有深入研究它,但似乎 numpy 使用了一种 introsort 类型的混合算法诉诸 insertion sort(这是稳定的) 适用于小范围。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-04
      • 2013-11-18
      • 2018-12-21
      • 2021-11-14
      • 1970-01-01
      • 2013-07-27
      • 2018-07-18
      • 1970-01-01
      相关资源
      最近更新 更多