Exemple timé avec timeit : NumPy vs listes Python

1. Installation et import

import numpy as np
import timeit

2. Création des données

On crée une liste Python et un tableau NumPy de même taille pour la comparaison.

size = 1_000_000
python_list = list(range(1, size + 1))
numpy_array = np.arange(1, size + 1)

3. Mesure du temps avec timeit

a. Liste Python : somme des carrés

def python_sum_squares():
    return sum(x*x for x in python_list)

python_time = timeit.timeit(python_sum_squares, number=10)
print(f"Liste Python : {python_time:.5f} secondes pour 10 exécutions")
print(f"Moyenne par exécution : {python_time/10:.5f} secondes")

b. Tableau NumPy : somme des carrés

def numpy_sum_squares():
    return np.sum(numpy_array**2)

numpy_time = timeit.timeit(numpy_sum_squares, number=10)
print(f"Tableau NumPy : {numpy_time:.5f} secondes pour 10 exécutions")
print(f"Moyenne par exécution : {numpy_time/10:.5f} secondes")

4. Résultats typiques

Voici ce que vous pourriez observer sur une machine standard (les valeurs exactes dépendent de votre matériel) :

Méthode Temps total pour 10 exécutions Temps moyen par exécution
Liste Python ~1.5 - 3.0 secondes ~0.15 - 0.30 seconde
Tableau NumPy ~0.01 - 0.05 secondes ~0.001 - 0.005 seconde

5. Exercice pour les étudiants

Consigne :


6. Explication pédagogique


7. Version avancée (optionnel)

Pour une comparaison encore plus précise, on peut utiliser timeit.repeat et calculer la moyenne et l’écart-type :

python_times = timeit.repeat(python_sum_squares, number=10, repeat=5)
numpy_times = timeit.repeat(numpy_sum_squares, number=10, repeat=5)

print(f"Liste Python : moyenne = {np.mean(python_times):.5f}s, écart-type = {np.std(python_times):.5f}s")
print(f"Tableau NumPy : moyenne = {np.mean(numpy_times):.5f}s, écart-type = {np.std(numpy_times):.5f}s")

8. Conclusion