在ipython笔记本中测量单元执行时间的简单方法

除了单元格的原始输出之外,我还想花费在单元格执行上的时间。

为此,我尝试了%%timeit -r1 -n1但是它没有暴露单元格中定义的variables。

%%time适用于只包含1条语句的单元格。

 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 

什么是最好的办法呢?

更新

我已经在Nbextension中使用了很长一段时间了。 太好了。

Phillip Cloud在github上使用cell magic和这个项目:

通过将其放置在笔记本的顶部,或者如果您始终要默认加载,请将其加载到configuration文件中:

 %install_ext https://raw.github.com/cpcloud/ipython-autotime/master/autotime.py %load_ext autotime 

如果加载,则后续单元格执行的每个输出将包括执行它的时间,以分钟和秒为单位。

我发现克服这个问题的唯一方法是通过执行最后的语句打印。

不要忘记,细胞魔法以%%开头,线魔法以%开头。

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

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

这不是很漂亮,但没有额外的软件

 class timeit(): from datetime import datetime def __enter__(self): self.tic = self.datetime.now() def __exit__(self, *args, **kwargs): print('runtime: {}'.format(self.datetime.now() - self.tic)) 

那么你可以像这样运行它:

 with timeit(): # your code, eg, print(sum(range(int(1e7)))) % 49999995000000 % runtime: 0:00:00.338492 

有时格式在使用print(res)的单元格中是不同的,但是jupyter / ipython带有一个display 。 看下面的使用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语句可以保留格式。 截图

我只是在单元格的开头添加%%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