我正在尝试使用timeit模块来计算分析数据的算法的速度。
问题是我必须运行一些设置代码才能运行此算法。具体来说,我必须从数据库加载一些文档,并将其转换为矩阵表示。
timeit模块似乎不允许我传入矩阵对象,而是强迫我在setup参数中重新设置它。不幸的是,这意味着我的算法的运行时间由预处理的运行时间模糊。
是否有某种方法可以传入已经创建的对象,以便在setup参数中计时?否则,我如何处理设置代码花费大量时间的情况,并且我不想让它模糊我实际尝试测试的代码块?
我接近这个错误的方式吗?
答案 0 :(得分:1)
运行设置代码所需的时间不会影响timeit
模块的时序计算。
您应该能够使用import将矩阵传递到setup参数,例如
"from __main__ import mymatrix"
答案 1 :(得分:1)
算法的运行时间未模糊由预处理的运行时间决定。这可以证明为:假设我在list
模块中声明__main__
并运行timeit
以查找此list
中某个项的索引。但我也需要将list
传递给timeit
。 list
传递是一种预处理。 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