我正在尝试使用 timeit 模块来计时分析数据的算法的速度。
问题是我必须运行一些设置代码才能运行这个算法。具体来说,我必须从数据库加载一些文档,并将其转换为矩阵表示。
timeit 模块似乎不允许我传入矩阵对象,而是强制我在设置参数中重新设置它。不幸的是,这意味着我的算法的运行时间被预处理的运行时间模糊了。
是否有某种方法可以传入已创建的对象,以便在设置参数中对其进行计时?否则,我该如何处理设置代码花费大量时间的情况,并且我不希望它模糊我实际尝试测试的代码块?
我是否以错误的方式处理这个问题?
最佳答案
算法的运行时间不会被预处理的运行时间模糊。这可以证明为:假设我声明一个 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
关于python - Timeit 模块 - 将对象传递给设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27683900/