我想得到的时间花在单元格执行除了原始的输出从单元格。

为此,我尝试了%%timeit -r1 -n1,但它没有公开在cell中定义的变量。

%%time适用于只包含1条语句的cell。

In[1]: %%time
       1
CPU times: user 4 µs, sys: 0 ns, total: 4 µs
Wall time: 5.96 µs
Out[1]: 1

In[2]: %%time
       # Notice there is no out result in this case.
       x = 1
       x
CPU times: user 3 µs, sys: 0 ns, total: 3 µs
Wall time: 5.96 µs

最好的方法是什么?

更新

我已经在nbeextension中使用执行时间相当长一段时间了。这是伟大的。

更新2021 - 03

到目前为止,这是正确的答案。从本质上讲,%%time和%%timeit现在都像预期的那样工作。


当前回答

你可能还想查看python的剖析魔法命令% prunit给出类似-的东西

def sum_of_lists(N):
    total = 0
    for i in range(5):
        L = [j ^ (j >> i) for j in range(N)]
        total += sum(L)
    return total

然后

%prun sum_of_lists(1000000)

将返回

14 function calls in 0.714 seconds  

Ordered by: internal time      

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    5    0.599    0.120    0.599    0.120 <ipython-input-19>:4(<listcomp>)
    5    0.064    0.013    0.064    0.013 {built-in method sum}
    1    0.036    0.036    0.699    0.699 <ipython-input-19>:1(sum_of_lists)
    1    0.014    0.014    0.714    0.714 <string>:1(<module>)
    1    0.000    0.000    0.714    0.714 {built-in method exec}

我发现它在处理大块代码时很有用。

其他回答

在ipython notebook中测量单元格执行时间的最简单方法是使用ipython-autotime包。

安装包在笔记本的开始

pip install ipython-autotime

然后通过下面运行加载扩展

%load_ext autotime

一旦加载了它,在此之后运行的任何单元格都将给出该单元格的执行时间。

不要担心,如果你想关闭它,只需卸载扩展运行下面

%unload_ext autotime

这是相当简单和容易使用它,只要你想。

如果你想了解更多,可以参考ipython-autime文档或其github源代码

%time和%timeit现在成为ipython内置魔法命令的一部分

如果你想打印壁单元格的执行时间,这里有一个技巧, 使用

%%time
<--code goes here-->

但这里要确保,%%time是一个神奇的函数, 所以把它放在代码的第一行。

如果你把它放在代码的某行之后它就会给你 使用错误,不能工作。

这只是旧版本的一个问题。

您现在需要做的就是在单元格的顶部放置%%time。

%%time表示运行某项操作所花费的时间。它更适合报告长时间运行的操作,而不是进行低级优化。

%%timeit是一个基准测试工具,它可以反复运行语句,以给出某些语句的平均运行时间以及标准偏差。由于语句重复执行的方式,在%%timeit单元格中创建的变量在其他单元格中不可用。

%%timeit使用python timeit模块。医生说,

它避免了 用于测量执行时间的常见陷阱的数量。另见蒂姆·彼得斯 Python Cookbook中“算法”章节的介绍,由 O ' reilly。

我希望该模块仍然是相关的,因为它所引用的参考描述了诸如(1)Windows 98只更新time.time() 18.2次每秒的解决方案,以及(2)将所有语句阻塞到一行上,以避免增加行号计数器的字节码开销。


目前排名最高的答案,以及其他一些过时的答案——应该删除,因为它们现在非常具有误导性——确实有有用的评论,表明这些答案是不正确的:

即使没有打印最后一个语句,%%time也可以工作 现在将测试单元格中的变量考虑到下一个单元格中

你可能还想查看python的剖析魔法命令% prunit给出类似-的东西

def sum_of_lists(N):
    total = 0
    for i in range(5):
        L = [j ^ (j >> i) for j in range(N)]
        total += sum(L)
    return total

然后

%prun sum_of_lists(1000000)

将返回

14 function calls in 0.714 seconds  

Ordered by: internal time      

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    5    0.599    0.120    0.599    0.120 <ipython-input-19>:4(<listcomp>)
    5    0.064    0.013    0.064    0.013 {built-in method sum}
    1    0.036    0.036    0.699    0.699 <ipython-input-19>:1(sum_of_lists)
    1    0.014    0.014    0.714    0.714 <string>:1(<module>)
    1    0.000    0.000    0.714    0.714 {built-in method exec}

我发现它在处理大块代码时很有用。