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

Tim*_*ote 3 python ipython timeit python-3.x

我是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)
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助都感激不尽。谢谢。

Max*_*ers 5

您只需执行以下操作:

func1_time = %timeit -o func1(10)
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式访问每次迭代的时间

func1_time.timings
Run Code Online (Sandbox Code Playgroud)

每个循环花费的总时间为

func1_time.all_runs
Run Code Online (Sandbox Code Playgroud)

请注意,您的循环不是必需的,因为在循环中%timeit执行代码N时间并迭代该循环r时间。


更新资料

如果您需要用于不同argumets的计时x,则可以尝试以下操作:

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

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

如果这样做,我建议指定rN选项,因为%timeit这会使循环数适应问题的复杂性。这意味着,按时执行功能所需的时间越长,运行的循环就越少。