Exercice 53 / 100

NumPy — Broadcasting

Comprends le broadcasting : opérations entre arrays de tailles différentes

Le broadcasting est la règle qui permet à NumPy d'opérer sur des arrays de tailles différentes. Au lieu de planter, il "étend" automatiquement le plus petit pour matcher le plus grand.

Cas 1 : array + scalaire

matrix = np.array([[1, 2, 3], [4, 5, 6]]) matrix * 2 # → [[ 2 4 6] # [ 8 10 12]]

Le scalaire 2 est "diffusé" sur tous les éléments. C'est du broadcasting trivial.

Cas 2 : matrice + vecteur ligne

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # shape (3, 3) row = np.array([10, 20, 30]) # shape (3,)
matrix + row # → [[11 22 33] # [14 25 36] # [17 28 39]]

Le vecteur row est ajouté à chaque ligne. NumPy étend row à la verticale.

Le broadcasting recopie la ligne de trois valeurs sur chacune des trois lignes de la matrice : rien n'est inventé ni vraiment stocké, la même ligne sert trois fois

Cas 3 : matrice + vecteur colonne

col = np.array([[100], [200], [300]]) # shape (3, 1)
matrix + col # → [[101 102 103] # [204 205 206] # [307 308 309]]

Le vecteur col est ajouté à chaque colonne.

Les règles du broadcasting

Deux arrays sont compatibles si, en alignant leurs shapes À droite, chaque dimension :

- est égale, - OU vaut 1, - OU est absente.

Exemple : (3, 3) + (3,) → (3, 3) car (3,) = (1, 3) étendu sur 3 lignes Exemple : (3, 3) + (3, 1) → (3, 3) car (3, 1) étendu sur 3 colonnes Exemple : (3, 3) + (2,) → ❌ shapes incompatibles

Cas d'usage : centrer/normaliser

data = np.random.randn(100, 3) # 100 lignes, 3 features centered = data - data.mean(axis=0) # mean = vecteur de 3 → broadcasting normalized = centered / data.std(axis=0) # idem

Une seule ligne suffit pour normaliser tout un dataset.

Le broadcasting évite des boucles explicites et rend le code mathématique plus court. Mais ça peut piéger : vérifie toujours .shape avant de combiner.

exercise.py

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →