Python瓶颈argpartsort性能

Python瓶颈argpartsort性能,python,performance,numpy,Python,Performance,Numpy,在对给定数组中的前n=1000个元素进行排序时,瓶颈.argpartsort具有最佳性能,这有什么原因(考虑到我没有搞错什么事情)吗 我创建了以下脚本: d = numpy.random.rand(300000) l = [] for i in range(5): to = time() ind = argpartsort(-d, pow(10,i)) tf = time() l.append((pow(10,i), tf - to)) 这导致: [(1, 0

在对给定数组中的前n=1000个元素进行排序时,瓶颈.argpartsort具有最佳性能,这有什么原因(考虑到我没有搞错什么事情)吗

我创建了以下脚本:

d = numpy.random.rand(300000)
l = []
for i in range(5):
    to = time()
    ind = argpartsort(-d, pow(10,i))
    tf = time()
    l.append((pow(10,i), tf - to))
这导致:

 [(1, 0.008157968521118164),
 (10, 0.006367921829223633),
 (100, 0.006164073944091797),
 (1000, 0.002994060516357422),
 (10000, 0.004293203353881836)]
绘制结果可以得出:

我认为argpartsort必须跟踪的值越少,它应该越快,但这不是我所观察到的。我是不是在什么地方搞砸了,还是在意料之中


提前谢谢

这里您只看到5个步骤。下面是您执行500步时的情况:

我相信这种波动来自于(轴心选择是问题-可能非常好,但可能非常糟糕,非常随机)。在快速排序中使用了类似的想法,让我们看看:

d = numpy.random.rand(3000)

def test(n):
    ld = d[:n]
    s = time.time()
    ld.sort()
    e = time.time()
    return e-t
这段代码表明,对于增加
i
,排序所花费的时间不应该减少(因为我们只取同一数组中的较大切片,所以如果我们可以更快地对较大切片进行排序,那么我们应该至少以同样的速度对较小切片进行排序)。结果如下:

正如你们所看到的,我们这里也有波动(我不是在谈论可能是由于我的机器所做的其他事情引起的大跳跃,而是在它们之间的微小跳跃)。问题在于算法本身。它的速度只有平均水平


最后请注意,您的机器在此期间所做的一切都会影响测试,因此很难给出完整的诊断。

您重复了多少次测试?也许当时其他一些进程占用了一些CPU时间?小范围的波动是很常见的。刚才我看到了你的评论。实际上,我只进行了3次测试,但我在所有测试中都得到了相同的结果,因此我得出结论,所消耗的时间是一个常数。现在看到你的答案,我意识到这就是排序算法的工作原理。