Python对可扩展容器进行排序的速度太慢,

ds97pgxw  于 2022-12-10  发布在  Python
关注(0)|答案(2)|浏览(150)

这是我的准则

from sortedcontainers import SortedList, SortedSet, SortedDict
import timeit
import random

def test_speed1(data):
    SortedList(data)

def test_speed2(data):
    sorted_data = SortedList()
    for val in data:
        sorted_data.add(val)

data = []
numpts = 10 ** 5
for i in range(numpts):
    data.append(random.random())
print(f'Num of pts:{len(data)}')

sorted_data = SortedList()
n_runs=10
result = timeit.timeit(stmt='test_speed1(data)', globals=globals(), number=n_runs)
print(f'Speed1 is {1000*result/n_runs:0.0f}ms')

n_runs=10
result = timeit.timeit(stmt='test_speed2(data)', globals=globals(), number=n_runs)
print(f'Speed2 is {1000*result/n_runs:0.0f}ms')

enter image description here
测试speed2的代码应该需要12毫秒(我检查了他们报告的设置)。为什么它需要123毫秒(慢10倍)???test_speed1运行在15毫秒(这是有意义的)
我在康达跑步。这是他们概述性能https://grantjenks.com/docs/sortedcontainers/performance.html的地方

a8jjtwal

a8jjtwal1#

您可能没有在与他们相同的条件下执行基准测试:

  • 您没有使用相同的基准代码,
  • 您不使用具有相同性能特征的同一台计算机,
  • 您没有使用相同的Python版本和环境,
  • 您没有运行相同的操作系统,
  • 等等。

因此,基准测试结果是不可比较的,您无法得出任何有关性能的结论(当然也不能得出“sortedcontainers太慢”的结论)。
性能仅与给定的执行上下文相关,他们仅表示他们的解决方案相对于其他并发解决方案更快。
如果您确实希望在计算机上执行基准测试,请遵循文档中给予的instructions

fzsnzjdm

fzsnzjdm2#

init()使用Python高度优化的sorted()函数,而add()不能。这就是speed2比speed3快的原因。
这是我从sortedcontainers库的开发人员那里得到的答案。

相关问题