Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Timeit模块-将对象传递给设置?_Python_Time_Timeit - Fatal编程技术网

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

Python Timeit模块-将对象传递给设置?,python,time,timeit,Python,Time,Timeit,我试图使用timeit模块对分析数据的算法的速度进行计时 问题是我必须运行一些设置代码才能运行这个算法。具体来说,我必须从数据库加载一些文档,并将其转换为矩阵表示 timeit模块似乎不允许我传入矩阵对象,而是强制我在设置参数中重新设置。不幸的是,这意味着我的算法的运行时间被预处理的运行时间模糊了 是否有方法将已创建的对象传入设置参数中的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次吗?有更好的方法吗?