IPython:如何为每次迭代保存timeit值

时间:2018-01-11 11:24:43

标签: python python-3.x ipython timeit

我是Python新手并尝试绘制两个函数的计算速度。例如,定义了两个函数(见下文),如何使用IPython / Jupyter中的timeit函数返回每次迭代的时间?

def func1(x) : 
    return x*x
def func2(x) :
    return x+x
%timeit for x in range(100) : func1(x)
%timeit for x in range(100) : func2(x)

我读了https://ipython.org/ipython-doc/3/interactive/magics.html我可以使用'-o'来“返回一个可以存储在变量中的TimeitResult,以便更详细地检查结果。”

但是如何将它保存到变量'func1_time'中,如何读取每次迭代的时间?我的目标是为两个函数绘制x与时间的关系。

任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:3)

您只需执行以下操作:

func1_time = %timeit -o func1(10)

您可以通过

访问每次迭代的时间
func1_time.timings

和每个循环所花费的总时间

func1_time.all_runs

请注意,您的循环是不必要的,因为%timeit在循环中执行代码N次并迭代此循环r次。

<小时/> 的更新

如果您需要针对不同参与者x的时间安排,您可以尝试以下方法:

func1_time = []
for i in [10, 100, 1000]:
    foo =  %timeit -o func1(x)
    func1_time.append(foo)

然后func1_time[0].timings保留func1(10)的时间。

如果您这样做,我建议您指定rN选项,因为%timeit会根据问题的复杂程度调整循环次数。方法,按时执行函数所需的时间越长,运行的循环就越少。