Estimación del tiempo de ejecución con timeit
abril 25, 2015
Estimación del tiempo de ejecución con timeit¶
El tiempo de ejecución de un algoritmo puede dar un estimado de que tan óptimo es nuestro código y permite establecer prioridades entre funciones que realizan las mismas acciones.
Uso del timeit¶
timeit es una función dentro del módulo timeit
Documentación: https://docs.python.org/2/library/timeit.html
Argumentos:¶
stmt = función o string con el código que se quiere evaluar.
setup = string con importación de la función (si stmt es un string) y argumentos de la función.
timer = Usa el método time de la librería time para estimar los segundos transcurridos.
number = Número de repeticiones que se ejecuta el algoritmo para realizar la estimación. por defecto = 1000000.
timeit sobre una línea de código¶
En el post de listas por comprensión se mostró una forma de crear listas a partir de bucles evitando la función map. Ahora se estima el tiempo de ejecución para cada función. Se crea una lista con los elementos del 0 al 3 y se elevan al cuadrado:
import timeit
timeit.timeit("map(lambda x: x**2, range(4))", number=1000)
timeit.timeit("[x**2 for x in range(4)]", number=1000)
En este caso con un tiempo estimado, con 1000 repeticiones, se muestra que el método de listas por comprensión es casi el doble de rápido que la función map.
Líneas que requieren importación de código o variables definidas en el algoritmo¶
se importa la librería numpy
timeit.timeit("np.array([x**2 for x in range(5000)])", setup = "import numpy as np" , number=1000)
Se importa el mismo archivo que se ejecuta y de este se toma la variable a. De igual forma se puede acceder a funciones.
a = range(100)
timeit.timeit('"-".join(str(n) for n in a)', setup="from __main__ import a", number=10000)
timeit sobre funciones¶
Cuando la función no tiene argumentos se puede escribir directamente como argumento en timeit.timeit
def area():
return 2*3
timeit.timeit(area)
Se importa el mismo archivo que se ejecuta y se importa la función aumento y la variable dato.
dato = 10
def aumento(numero):
return numero+10
timeit.timeit("aumento(dato)", setup = "from __main__ import aumento, dato")
Se puede crear una instancia de la clase Timer y posteriormente estimar tiempos de ejecución especificando las repeticiones para el código y para el timer
Métodos timeit y repeat de la clase Timer¶
Clase timeit.Timer()
Se crea time como una instancia de Timer para la función aumento
def aumento(numero):
return numero+10
time = timeit.Timer("aumento(6)","from __main__ import aumento")
print type(time)
Ahora se estima el tiempo una sola vez para 10 repeticiones del código
time.timeit(number=10)
Con el método repeat se realizan 5 repeticiones del timer y 10 repeticiones del código para cada repetición del timer
time.repeat(repeat = 5, number = 10)
0 comments