Una forma sencilla de medir el tiempo de ejecución de la celda en un portátil ipython

Me gustaría obtener el tiempo dedicado a la ejecución de la celda además de la salida original de la celda.

Para este fin, probé %%timeit -r1 -n1 pero no expone la variable definida dentro de la celda.

%%time funciona para la celda que solo contiene 1 instrucción.

 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 

¿Cuál es la mejor manera de hacerlo?

Actualizar

He estado usando Execute Time in Nbextension desde hace bastante tiempo. Eso es genial.

Usa la magia celular y este proyecto en github por Phillip Cloud:

Cárguelo colocando esto en la parte superior de su cuaderno o póngalo en su archivo de configuración si siempre quiere cargarlo por defecto:

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

Si está cargado, cada salida de la ejecución de celda posterior incluirá el tiempo en minutos y segundos que se tardó en ejecutarlo.

La única forma que encontré para superar este problema es ejecutando la última statement con la impresión.

No olvide que la magia celular comienza con %% y la magia de línea comienza con % .

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

%time y %timeit ahora forman parte de los comandos mágicos incorporados de ipython

Una forma más fácil es usar el complemento ExecuteTime en el paquete jupyter_contrib_nbextensions.

 pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user jupyter nbextension enable execute_time/ExecuteTime 

Simplemente agregué %%time al comienzo de la celda y obtuve el tiempo. Puede usar el mismo en el clúster / entorno virtual de Jupyter Spark usando el mismo. Simplemente agregue %%time en la parte superior de la celda y obtendrá el resultado. En el cluster de chispas usando Jupyter, agregué a la parte superior de la celda y obtuve una salida como la siguiente:

 [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 

Esto no es exactamente hermoso pero sin software adicional

 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)) 

Entonces puedes ejecutarlo como:

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

A veces, el formato es diferente en una celda cuando se usa print(res) , pero jupyter / ipython viene con una display . Vea un ejemplo de la diferencia de formato usando pandas a continuación.

 %%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) 

La statement de display puede conservar el formato. captura de pantalla

es posible que también desee consultar el comando mágico de creación de perfiles de python %prun que ofrece algo como:

 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 

entonces

 %prun sum_of_lists(1000000) 

volverá

 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 :4() 5 0.064 0.013 0.064 0.013 {built-in method sum} 1 0.036 0.036 0.699 0.699 :1(sum_of_lists) 1 0.014 0.014 0.714 0.714 :1() 1 0.000 0.000 0.714 0.714 {built-in method exec} 

Me resulta útil cuando se trabaja con grandes trozos de código.

Puedes usar la función mágica del tiempo para eso.

 %timeit CODE_LINE 

O en la celda

 %%timeit SOME_CELL_CODE 

Ver más funciones mágicas de IPython en https://nbviewer.jupyter.org/github/ipython/ipython/blob/1.x/examples/notebooks/Cell%20Magics.ipynb