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

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

timeit模块似乎不允许我传递矩阵对象,而是迫使我在setup参数中再次进行设置。不幸的是,这意味着我的算法的运行时间被预处理的运行时间所模糊。

有什么方法可以将已经创建的对象传递给setup参数中的时间?否则,我该如何处理安装代码花费大量时间而又不想让我实际上试图测试的代码块变得模糊的情况?

我是否以错误的方式处理此问题?

最佳答案

算法的运行时间不会受到预处理运行时间的影响。这可以证明为:假设我在list模块中声明了__main__并运行timeit在该list中查找某个项目的索引。但是我也需要将list传递给timeitlist传递是一种预处理。 timeit返回的时间显示为0.26秒(请参见下面的代码)。现在,如果timeit也已经计算了预处理时间(从__main__导入列表),那么结果将几乎为1.1秒,因为从list导入__main__需要进行100万次迭代需要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/

10-15 17:37