Más sobre la función timeit
Por Alvaro en el foro python-es en respuesta a "¿El método que acabas de mostrar para medir tiempos se podría hacer con un conjunto de instrucciones y funciones?":
Si viejo. Por ejemplo
Pero eso no seria muy inteligente ya que timeit tambien mediria cuanto se demora en definir la funcion, y eso no es lo que uno quiere.
Por ultimo la funcion timeit tiene un defecto. De que los datos que muestra no son los reales. Lo que hace la clase Timer es simplemente ejecuta una ves lo que le pases como 2do argumento y luego ejecuta un millon de veces (no me acuerdo si es un millon o solo mil veces) lo que le pases como primer argumento, sacando un promedio de cuanto se demoro cada ves que ejecuto el primer argumento. Pero el promedio que saca es cuando "se ejecutan el argumento muchas veces seguido" o dicho de otra forma, con gran estress. Asi que no hay que decir la funcion se demora en ejecutarce 0.55 seg, sino que hay que decir, bajo estress la funcion se demora 0.55 seg.
Para ser mas exactos es mejor no considerar a la funcion timeit como una funcion que mide el tiempo de ejecucion de algo, sino como algo que cuantifique el coste de ejecución de algo y que solo es valido cuando se compara con otra cosa (como por ejemplo cuando comparamos la ejecucion del len con distintos largos de string). Si esto se puede complementar con un
test de hipotesis de comparacion de medias, ideal....
Si viejo. Por ejemplo
Tambien podrias incluir dentro de la variable x la definición de la funcion.
X="""
x=4
y=5
z=x*y
"""
from timeit import Timer
Print Timer(X).timeit()
Eso si... Si quieres evaluar el desempeño de una funcion, por ejemplo una
funcion cuadrado te recomiendo:
from timeit import Timer
x="cuadrado(5)"
y="""
def cuadrado(x):
return x*x
"""
print Timer(x,y).timeit()
Pero eso no seria muy inteligente ya que timeit tambien mediria cuanto se demora en definir la funcion, y eso no es lo que uno quiere.
Por ultimo la funcion timeit tiene un defecto. De que los datos que muestra no son los reales. Lo que hace la clase Timer es simplemente ejecuta una ves lo que le pases como 2do argumento y luego ejecuta un millon de veces (no me acuerdo si es un millon o solo mil veces) lo que le pases como primer argumento, sacando un promedio de cuanto se demoro cada ves que ejecuto el primer argumento. Pero el promedio que saca es cuando "se ejecutan el argumento muchas veces seguido" o dicho de otra forma, con gran estress. Asi que no hay que decir la funcion se demora en ejecutarce 0.55 seg, sino que hay que decir, bajo estress la funcion se demora 0.55 seg.
Para ser mas exactos es mejor no considerar a la funcion timeit como una funcion que mide el tiempo de ejecucion de algo, sino como algo que cuantifique el coste de ejecución de algo y que solo es valido cuando se compara con otra cosa (como por ejemplo cuando comparamos la ejecucion del len con distintos largos de string). Si esto se puede complementar con un
test de hipotesis de comparacion de medias, ideal....
No hay comentarios:
Publicar un comentario