ConsigneRemplace les boucles par des opérations vectorisées
La vectorisation = remplacer une boucle Python par une opération NumPy globale. Beaucoup plus rapide (souvent 10× à 100×).
data = np.random.randn(1000)result = []for x in data: result.append((x - data.mean()) / data.std())Lent car
- boucle Python interprétée- data.mean() recalculé à chaque tour- création d'une listedata = np.random.randn(1000)normalized = (data - np.mean(data)) / np.std(data)Une ligne. Mean/std calculés une fois. Opération sur tout l'array d'un coup.
Applique une fonction à tous les éléments en code natif :
x = np.linspace(0, 2*np.pi, 100)y = np.sin(x) # 100 sinus en une foisnp.exp(data)np.log(np.abs(data) + 1) # le log exige des valeurs > 0 : sur un négatif il rend nannp.sqrt(data ** 2)Évite à tout prix : [np.sin(v) for v in x]
Somme des produits terme à terme :
a = np.array([1, 2, 3])b = np.array([4, 5, 6])np.dot(a, b) → 1*4 + 2*5 + 3*6 = 32a @ b → équivalent(a * b).sum() → équivalent (mais np.dot est plus rapide)- boucle Python : ~ 100M ops/s- NumPy vectorisé : ~ 10G ops/s (boucle C interne)- en plus, exploite SIMD du CPURègle d'or : si tu écris un for sur un array NumPy, demande-toi systématiquement "y a-t-il une fonction vectorisée pour ça ?". Souvent oui : np.sum, np.mean, np.where, comparaisons, opérateurs arithmétiques.
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →