Manera simple de medir el tiempo de ejecución de la celda en el cuaderno ipython

5 minutos de lectura

avatar de usuario
colinfang

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

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

%%time funciona para celdas que solo contienen 1 declaració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 Tiempo de ejecución en Nbextension desde hace bastante tiempo. Eso es genial.

Actualización 2021-03

A partir de ahora, esta es la respuesta correcta. Esencialmente, %%time y %%timeit ambos funcionan ahora como cabría esperar.

  • ¿Realmente necesita cronometrar la visualización del valor? ¿Por qué no simplemente poner el x línea de visualización en la siguiente celda?

    – dicha

    19 de febrero de 2016 a las 17:58

  • ¿Por qué no aceptar una respuesta?

    – raratiru

    28/03/2017 a las 20:30

avatar de usuario
Salvador Dalí

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

No olvides eso la magia celular comienza con %% y la magia de líneas comienza con %.

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

Tenga en cuenta que los cambios realizados dentro de la celda no se tienen en cuenta en las siguientes celdas, algo que es contrario a la intuición cuando hay una canalización:
un ejemplo

  • Ahora %%time funciona incluso cuando la última declaración no se imprime, como @rhaps0dy señaló anteriormente.

    – nealmcb

    17 de agosto de 2018 a las 1:18

  • display(res) también funciona y es la solución preferida cuando se intenta mostrar un marco de datos de pandas o cualquier otra cosa que requiera una salida estilizada.

    – dshefman

    31/10/2018 a las 15:53


  • @dshefman Sí, eso es correcto y también lo hace fácil de transportar para portátiles de databricks/spark.

    – technazi

    6 de noviembre de 2018 a las 4:55

  • ¿No es un problema cuando implementamos la primera celda? %%time y a=1 pero la segunda celda no sabe qué a ¿es?

    – Jasón

    27 de agosto de 2019 a las 19:25


  • para tu información Descubrí que las variables en la celda probada ahora se tienen en cuenta en las siguientes celdas. (20/02/2020) – Fei

    –Fei Yao

    20 de febrero de 2020 a las 18:27

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

  • ¡Esta es la respuesta más subestimada!

    – DaveR

    6 de julio de 2019 a las 9:38

  • para alguien que se sumerge en el mar de respuestas: este es el indicado, solo instálelo y luego verá el tiempo de ejecución en cada celda en un formato agradable

    – El pocho la pantera

    19 de febrero de 2020 a las 18:29

  • funcionó perfectamente! también se incluye la marca de tiempo cuando se ha ejecutado la celda

    – Timo

    29 de abril de 2021 a las 13:49

  • Y si pip no funciona, las opciones de instalación directa o conda se mencionan en github github.com/ipython-contrib/jupyter_contrib_nbextensions

    – viento

    29 de abril de 2021 a las 17:33

avatar de usuario
ryanmc

%time y %timeit ahora ven parte de la función integrada de ipython comandos mágicos

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

Cárguelo colocando esto en la parte superior de su computadora portátil o colóquelo en su archivo de configuración si siempre desea cargarlo de manera predeterminada:

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

Si se carga, cada salida de la ejecución de celda subsiguiente incluirá el tiempo en minutos y segundos que tomó ejecutarla.

import time
start = time.time()
"the code you want to test stays here"
end = time.time()
print(end - start)

  • Perfecto. Es demasiado complicado preservar el objeto de %%timeit y usarlo en la siguiente celda

    – Pablo

    9 de julio de 2020 a las 17:47

  • ¿Cuáles son las unidades de este tiempo, segundos?

    – Sachin Motwani

    28 de julio a las 6:58

Eso era solo un problema en las versiones anteriores.

Todo lo que necesita hacer ahora es poner %%time en la parte superior de la celda.

ingrese la descripción de la imagen aquí

%%time mide el tiempo que tardó algo en ejecutarse. Es mejor para generar informes sobre operaciones de ejecución prolongada que para realizar optimizaciones de bajo nivel.

%%timeit es una herramienta de evaluación comparativa que ejecuta declaraciones una y otra vez para dar la promedio tiempo de ejecución para algunas declaraciones, así como la desviación estándar. Debido a la forma en que se ejecutan repetidamente las sentencias, las variables creadas en %%timeit las celdas no están disponibles en otras celdas.

ingrese la descripción de la imagen aquí

%%timeit usa la pitón timeit módulo. Los documentos para eso dicen,

Evita una serie de trampas comunes para medir los tiempos de ejecución. Véase también la introducción de Tim Peters al capítulo “Algoritmos” en el Libro de cocina de Pythonpublicado por O’Reilly.

yo esperar que ese módulo sigue siendo relevante, ya que la referencia a la que se refiere describe problemas como (1) soluciones alternativas para la actualización de Windows 98 solamente time.time() 18,2 veces por segundo, y (2) atascar todas las declaraciones en una línea para evitar la sobrecarga del código de bytes de incrementar el contador de número de línea.


La respuesta mejor calificada actualmente, así como algunas de las otras obsoletas, que deben eliminarse porque ahora están altamente engañosohacer tiene comentarios útiles que indican que esas respuestas no son correctas:

  • %%time funciona incluso cuando la última declaración no es print
  • las variables en la celda probada ahora se tienen en cuenta en las siguientes celdas

  • Perfecto. Es demasiado complicado preservar el objeto de %%timeit y usarlo en la siguiente celda

    – Pablo

    9 de julio de 2020 a las 17:47

  • ¿Cuáles son las unidades de este tiempo, segundos?

    – Sachin Motwani

    28 de julio a las 6:58

Puedes usar timeit función mágica para eso.

%timeit CODE_LINE

O en el celular

%%timeit 

SOME_CELL_CODE

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

¿Ha sido útil esta solución?