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

为此,我尝试了%%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现在都像预期的那样工作。


当前回答

你可以使用timeit魔法函数。

%timeit CODE_LINE

或者在单元格上

%%timeit 

SOME_CELL_CODE

查看更多IPython魔法功能,请访问https://nbviewer.jupyter.org/github/ipython/ipython/blob/1.x/examples/notebooks/Cell%20Magics.ipynb

其他回答

当使用print(res)时,有时单元格中的格式是不同的,但jupyter/ipython带有显示。请参阅下面使用pandas的格式差异示例。

%%time
import pandas as pd 
from IPython.display import display

df = pd.DataFrame({"col0":{"a":0,"b":0}
              ,"col1":{"a":1,"b":1}
              ,"col2":{"a":2,"b":2}
             })

#compare the following
print(df)
display(df)

display语句可以保留格式。

你可能还想查看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}

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

我发现克服这个问题的唯一方法是用print执行最后一条语句。

不要忘记单元格魔术以%%开始,行魔术以%开始。

%%time
clf = tree.DecisionTreeRegressor().fit(X_train, y_train)
res = clf.predict(X_test)
print(res)

注意,在单元格内执行的任何更改都不会在下一个单元格中被考虑,当有管道时,这是违反直觉的:

我只是在单元格的开头添加了%%time,就得到了时间。您可以在Jupyter Spark集群/虚拟环境中使用相同的方法。只需在单元格顶部添加%%time,就会得到输出。在使用Jupyter的星火集群上,我添加到单元格的顶部,我得到如下输出

[1]  %%time
     import pandas as pd
     from pyspark.ml import Pipeline
     from pyspark.ml.classification import LogisticRegression
     import numpy as np
     .... code ....

Output :-

CPU times: user 59.8 s, sys: 4.97 s, total: 1min 4s
Wall time: 1min 18s

你可以使用timeit魔法函数。

%timeit CODE_LINE

或者在单元格上

%%timeit 

SOME_CELL_CODE

查看更多IPython魔法功能,请访问https://nbviewer.jupyter.org/github/ipython/ipython/blob/1.x/examples/notebooks/Cell%20Magics.ipynb