Timeit模块 - 将对象传递给设置?

时间:2014-12-29 05:36:52

标签: python time timeit

我正在尝试使用timeit模块来计算分析数据的算法的速度。

问题是我必须运行一些设置代码才能运行此算法。具体来说,我必须从数据库加载一些文档,并将其转换为矩阵表示。

timeit模块似乎不允许我传入矩阵对象,而是强迫我在setup参数中重新设置它。不幸的是,这意味着我的算法的运行时间由预处理的运行时间模糊。

是否有某种方法可以传入已经创建的对象,以便在setup参数中计时?否则,我如何处理设置代码花费大量时间的情况,并且我不想让它模糊我实际尝试测试的代码块?

我接近这个错误的方式吗?

2 个答案:

答案 0 :(得分:1)

运行设置代码所需的时间不会影响timeit模块的时序计算。

您应该能够使用import将矩阵传递到setup参数,例如

"from __main__ import mymatrix"

答案 1 :(得分:1)

算法的运行时间未模糊由预处理的运行时间决定。这可以证明为:假设我在list模块中声明__main__并运行timeit以查找此list中某个项的索引。但我也需要将list传递给timeitlist传递是一种预处理。 timeit返回的时间显示 0.26秒(请参阅下面的代码)。现在,如果timeit计算了预处理时间(从__main__导入列表),那么结果将近1.1秒,因为从list导入__main__对于1000000次迭代,需要 0.84秒(参见下面的代码)。 timeit的作用是从list仅导入__main__一次,然后计算算法在给定迭代次数下所需的时间。

>>> 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