我是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与时间的关系。
任何帮助将不胜感激。感谢。
答案 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)
的时间。
如果您这样做,我建议您指定r
和N
选项,因为%timeit
会根据问题的复杂程度调整循环次数。方法,按时执行函数所需的时间越长,运行的循环就越少。