Siempre leo el código para calcular el tiempo de esta manera:
%timeit function()
¿Puede explicar qué significa "%" aquí?
Creo que el "%" siempre se usa para reemplazar algo en una cadena, como% s significa reemplazar una cadena,% d reemplazar un dato, pero no tengo idea sobre este caso.
Respuestas:
%timeit
es una función mágica de ipython , que se puede usar para cronometrar un fragmento de código en particular (una sola declaración de ejecución o un solo método).De los documentos:
Para usarlo, por ejemplo, si queremos saber si usar
xrange
es más rápido que usarrange
, simplemente puede hacer:In [1]: %timeit for _ in range(1000): True 10000 loops, best of 3: 37.8 µs per loop In [2]: %timeit for _ in xrange(1000): True 10000 loops, best of 3: 29.6 µs per loop
Y obtendrás los tiempos para ellos.
Las principales ventajas de
%timeit
son:que no tiene que importar
timeit.timeit
desde la biblioteca estándar y ejecutar el código varias veces para averiguar cuál es el mejor enfoque.% timeit calculará automáticamente el número de ejecuciones necesarias para su código en función de una ventana de ejecución total de 2 segundos.
También puede hacer uso de las variables de la consola actual sin pasar el fragmento de código completo, como en el caso de
timeit.timeit
construir la variable que está construida en otro entorno en el que funciona.fuente
%timeit function()
timer.timeit
: ¿es ese un nombre de módulo real?10000 loops, best of 3: 29.6 µs per loop
se puede interpretar como: (1.) la expresión se ejecuta 10000 veces para obtener el tiempo total (2.) luego el tiempo total se divide por 10000 para obtener el tiempo "por ciclo" y (3.) se realiza el cálculo del tiempo total 3 veces y finalmente (4) de las 3 veces totales, el tiempo total mínimo (también conocido como "mejor de 3") se utiliza como salida. ¿Mi interpretación es correcta, sí / no?Esto se conoce como una línea mágica en iPython. Son únicos en el sentido de que sus argumentos solo se extienden hasta el final de la línea actual, y la magia en sí está realmente estructurada para el desarrollo de la línea de comandos.
timeit
se utiliza para cronometrar la ejecución del código.Si desea ver todas las magias que puede usar, simplemente puede escribir:
para obtener una lista de magia de línea y magia de celda.
Más información mágica de la documentación aquí :
Dependiendo de si está en modo de línea o celular , hay dos formas diferentes de usar
%timeit
. Tu pregunta ilustra la primera forma:In [1]: %timeit range(100)
vs.
In [1]: %%timeit : x = range(100) :
fuente
IPython los intercepta, se denominan comandos mágicos integrados, aquí está la lista: https://ipython.org/ipython-doc/dev/interactive/magics.html
También puede crear sus propias magias personalizadas, https://ipython.org/ipython-doc/dev/config/custommagics.html
Su
timeit
está aquí https://ipython.org/ipython-doc/dev/interactive/magics.html#magic-timeitfuente
Solo me gustaría agregar otra ventaja útil de usar% timeit para responder por mu 無que:
PD: Sé que esto debería ser un comentario para responder arriba, pero actualmente no tengo suficiente reputación para eso, espero que lo que escribo sea útil para alguien y me ayude a ganar suficiente reputación para comentar la próxima vez.
fuente
Solo quería agregar un punto muy sutil sobre %% timeit. Dado que ejecuta la "magia" en la celda , obtendrá un error ...
UsageError: función mágica de línea
%%timeit
no encontrada... si hay alguna línea de código / comentario por encima de %% timeit. En otras palabras, asegúrese de que %% timeit sea el primer comando en su celda.
Sé que es un pequeño punto al que todos los expertos dirán duh, pero solo quería agregar mi medio centavo para los jóvenes magos que comienzan con trucos de magia.
fuente
Las magias de línea tienen el prefijo % y funcionan de manera muy similar a las llamadas de línea de comandos del sistema operativo: obtienen como argumento el resto de la línea, donde los argumentos se pasan sin paréntesis ni comillas. Las magias celulares tienen el prefijo %% doble , y son funciones que obtienen como argumento no solo el resto de la línea, sino también las líneas debajo de ella en un argumento separado.
fuente