Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Fundamentos de Temporización y Evaluación Comparativa | Comprensión y Medición del Rendimiento
Técnicas de Optimización en Python

bookFundamentos de Temporización y Evaluación Comparativa

Dado que no se enfatiza el análisis de la complejidad temporal en este curso, se dará prioridad a los métodos empíricos (prácticos) para medir el rendimiento real del código. Una de las formas más sencillas de medir el rendimiento de un fragmento de código es utilizando la función incorporada time.time().

Esta función devuelve el tiempo actual en segundos desde la época (el punto de referencia del sistema para el tiempo). Al llamar a time.time() antes y después de un bloque de código, se puede calcular la diferencia para ver cuánto tiempo tarda en ejecutarse.

123456789101112131415
import time # Record the start time start_time = time.time() # Code you want to measure result = [x**2 for x in range(1000000)] # Record the end time end_time = time.time() # Calculate the difference to get the execution time execution_time = end_time - start_time print(f'Execution time: {execution_time} seconds')
copy

Aunque el uso de time.time() es sencillo y efectivo para estimaciones aproximadas, presenta varias limitaciones:

  • Baja resolución: la precisión de time.time() puede variar según el sistema operativo, lo que conduce a resultados inexactos para operaciones pequeñas;
  • Sobrecarga: incluye otros procesos del sistema que se ejecutan en segundo plano, lo que puede distorsionar la medición;
  • No repite: para obtener mediciones más precisas, a menudo es necesario ejecutar el mismo código varias veces para obtener un resultado promedio, algo que time.time() no gestiona automáticamente.

Ventajas de usar timeit

El módulo timeit es una herramienta más avanzada diseñada para superar las limitaciones de time.time() y proporcionar una forma confiable de medir el tiempo de ejecución de pequeños fragmentos de código, a menudo denominado micro-benchmarking.

Las principales ventajas de timeit son:

  • Alta precisión: timeit utiliza time.perf_counter() internamente, un temporizador de alta resolución que incluye el tiempo dedicado durante el sueño y la espera de E/S, lo que lo hace más preciso para intervalos cortos que time.time();

  • Repetición automática: timeit ejecuta automáticamente el código varias veces y calcula el tiempo de ejecución promedio. Esto ayuda a mitigar los efectos de los procesos en segundo plano, proporcionando una medida más confiable del rendimiento del código;

  • Sobrecarga mínima: timeit está diseñado para ejecutarse en un entorno limpio, deshabilitando temporalmente la recolección de basura para asegurar que las mediciones se centren en el código evaluado sin interferencias de las operaciones de gestión de memoria.

1234567
import timeit # Code snippet to test code_snippet = 'result = [x**2 for x in range(1000000)]' # Running timeit to measure execution time iterations = 30 execution_time = timeit.timeit(code_snippet, number=iterations) print(f'Average Execution Time: {execution_time / iterations} seconds')
copy

En este ejemplo, timeit.timeit() ejecuta el código especificado como una cadena (variable code_snippet) 30 veces (especificado por el parámetro number) y devuelve el tiempo total de ejecución para las 30 ejecuciones. Al dividir el tiempo total por el número de iteraciones (30), se puede calcular el tiempo de ejecución promedio para una sola ejecución.

Elección del Número de Iteraciones

La elección del número de iteraciones depende de la complejidad del código que se está evaluando y la precisión requerida en los resultados de tiempo. Ejecutar el código con diferentes cantidades de iteraciones permite evaluar la estabilidad de los resultados; si los tiempos de ejecución son consistentes, probablemente se ha encontrado un número óptimo de iteraciones.

Para fragmentos de código muy rápidos (milisegundos o menos), se recomienda realizar más de 1000 iteraciones para obtener promedios confiables. Para código de duración moderada (algunos milisegundos a segundos), 100 a 500 iteraciones suelen ser suficientes. Para código de ejecución prolongada (varios segundos o más), 10 a 50 iteraciones normalmente proporcionan un buen equilibrio entre precisión y tiempo dedicado a la evaluación.

1. ¿Qué función proporciona alta precisión y ejecuta automáticamente el código varias veces para calcular un tiempo de ejecución promedio?

2. ¿Por qué el uso de time.time() para medir el rendimiento puede ser menos confiable que timeit.timeit()?

question mark

¿Qué función proporciona alta precisión y ejecuta automáticamente el código varias veces para calcular un tiempo de ejecución promedio?

Select the correct answer

question mark

¿Por qué el uso de time.time() para medir el rendimiento puede ser menos confiable que timeit.timeit()?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 2

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

bookFundamentos de Temporización y Evaluación Comparativa

Desliza para mostrar el menú

Dado que no se enfatiza el análisis de la complejidad temporal en este curso, se dará prioridad a los métodos empíricos (prácticos) para medir el rendimiento real del código. Una de las formas más sencillas de medir el rendimiento de un fragmento de código es utilizando la función incorporada time.time().

Esta función devuelve el tiempo actual en segundos desde la época (el punto de referencia del sistema para el tiempo). Al llamar a time.time() antes y después de un bloque de código, se puede calcular la diferencia para ver cuánto tiempo tarda en ejecutarse.

123456789101112131415
import time # Record the start time start_time = time.time() # Code you want to measure result = [x**2 for x in range(1000000)] # Record the end time end_time = time.time() # Calculate the difference to get the execution time execution_time = end_time - start_time print(f'Execution time: {execution_time} seconds')
copy

Aunque el uso de time.time() es sencillo y efectivo para estimaciones aproximadas, presenta varias limitaciones:

  • Baja resolución: la precisión de time.time() puede variar según el sistema operativo, lo que conduce a resultados inexactos para operaciones pequeñas;
  • Sobrecarga: incluye otros procesos del sistema que se ejecutan en segundo plano, lo que puede distorsionar la medición;
  • No repite: para obtener mediciones más precisas, a menudo es necesario ejecutar el mismo código varias veces para obtener un resultado promedio, algo que time.time() no gestiona automáticamente.

Ventajas de usar timeit

El módulo timeit es una herramienta más avanzada diseñada para superar las limitaciones de time.time() y proporcionar una forma confiable de medir el tiempo de ejecución de pequeños fragmentos de código, a menudo denominado micro-benchmarking.

Las principales ventajas de timeit son:

  • Alta precisión: timeit utiliza time.perf_counter() internamente, un temporizador de alta resolución que incluye el tiempo dedicado durante el sueño y la espera de E/S, lo que lo hace más preciso para intervalos cortos que time.time();

  • Repetición automática: timeit ejecuta automáticamente el código varias veces y calcula el tiempo de ejecución promedio. Esto ayuda a mitigar los efectos de los procesos en segundo plano, proporcionando una medida más confiable del rendimiento del código;

  • Sobrecarga mínima: timeit está diseñado para ejecutarse en un entorno limpio, deshabilitando temporalmente la recolección de basura para asegurar que las mediciones se centren en el código evaluado sin interferencias de las operaciones de gestión de memoria.

1234567
import timeit # Code snippet to test code_snippet = 'result = [x**2 for x in range(1000000)]' # Running timeit to measure execution time iterations = 30 execution_time = timeit.timeit(code_snippet, number=iterations) print(f'Average Execution Time: {execution_time / iterations} seconds')
copy

En este ejemplo, timeit.timeit() ejecuta el código especificado como una cadena (variable code_snippet) 30 veces (especificado por el parámetro number) y devuelve el tiempo total de ejecución para las 30 ejecuciones. Al dividir el tiempo total por el número de iteraciones (30), se puede calcular el tiempo de ejecución promedio para una sola ejecución.

Elección del Número de Iteraciones

La elección del número de iteraciones depende de la complejidad del código que se está evaluando y la precisión requerida en los resultados de tiempo. Ejecutar el código con diferentes cantidades de iteraciones permite evaluar la estabilidad de los resultados; si los tiempos de ejecución son consistentes, probablemente se ha encontrado un número óptimo de iteraciones.

Para fragmentos de código muy rápidos (milisegundos o menos), se recomienda realizar más de 1000 iteraciones para obtener promedios confiables. Para código de duración moderada (algunos milisegundos a segundos), 100 a 500 iteraciones suelen ser suficientes. Para código de ejecución prolongada (varios segundos o más), 10 a 50 iteraciones normalmente proporcionan un buen equilibrio entre precisión y tiempo dedicado a la evaluación.

1. ¿Qué función proporciona alta precisión y ejecuta automáticamente el código varias veces para calcular un tiempo de ejecución promedio?

2. ¿Por qué el uso de time.time() para medir el rendimiento puede ser menos confiable que timeit.timeit()?

question mark

¿Qué función proporciona alta precisión y ejecuta automáticamente el código varias veces para calcular un tiempo de ejecución promedio?

Select the correct answer

question mark

¿Por qué el uso de time.time() para medir el rendimiento puede ser menos confiable que timeit.timeit()?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 2
some-alt