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 fois
np.exp(data)
np.log(data + 1)
np.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 = 32
a @ 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 →