Python Timeit模块-将对象传递给设置?
我试图使用timeit模块对分析数据的算法的速度进行计时 问题是我必须运行一些设置代码才能运行这个算法。具体来说,我必须从数据库加载一些文档,并将其转换为矩阵表示 timeit模块似乎不允许我传入矩阵对象,而是强制我在设置参数中重新设置。不幸的是,这意味着我的算法的运行时间被预处理的运行时间模糊了 是否有方法将已创建的对象传入设置参数中的timeit?否则,我如何处理设置代码占用大量时间的情况,而我不希望这会模糊我实际尝试测试的代码块Python Timeit模块-将对象传递给设置?,python,time,timeit,Python,Time,Timeit,我试图使用timeit模块对分析数据的算法的速度进行计时 问题是我必须运行一些设置代码才能运行这个算法。具体来说,我必须从数据库加载一些文档,并将其转换为矩阵表示 timeit模块似乎不允许我传入矩阵对象,而是强制我在设置参数中重新设置。不幸的是,这意味着我的算法的运行时间被预处理的运行时间模糊了 是否有方法将已创建的对象传入设置参数中的timeit?否则,我如何处理设置代码占用大量时间的情况,而我不希望这会模糊我实际尝试测试的代码块 我是否以错误的方式处理此问题?运行设置代码所需的时间不会影响
我是否以错误的方式处理此问题?运行设置代码所需的时间不会影响
timeit
模块的计时计算
您应该能够使用导入将矩阵传递到设置参数中,例如
“从uuu main\uuuuu导入mymatrix”
算法的运行时间不会因预处理的运行时间而变得模糊。这可以证明为:假设我在\uuuuu main\uuuuu
模块中声明了一个列表
,并运行timeit
来查找该列表
中某项的索引。但是我也需要将列表
传递给timeit
。列表
传递是一种预处理。timeit
返回的时间显示0.26秒(见下面的代码)。现在,如果timeit
也会计算预处理时间(从\uuuuu main\uuuuu
导入列表),那么结果几乎是1.1秒,因为从\uuuu main\uuuu
导入list
需要0.84秒进行1000000次迭代(见下面的代码)。timeit
只从\uuuuu main\uuuuu
导入一次list
,然后计算给定迭代次数下算法所需的时间
>>> import timeit
>>> lst = range(10)
>>> timeit.timeit('lst.index(9)', 'from __main__ import lst', number = 1000000)
0.2645089626312256
>>> timeit.timeit('from __main__ import lst', number = 1000000)
0.8406829833984375
@user2142580:您甚至可以直接比较:
min(timeit.repeat(partial(lst.index,9))
(这里没有设置
步骤,但结果应该类似)。因此,假设我想运行这个实验5次。我正在做timeit.Timer(函数调用字符串,setup=setup)。重复(5,1))。这个电话会打5次吗?有更好的方法吗?