Python (école d'ingénieur) · Chapitre 8 · Exercice
Normalisation par broadcasting
Calcul scientifique avec NumPy
Énoncé
Soit une matrice de taille représentant points dans un espace à dimensions.
- Créer une matrice de forme avec des valeurs aléatoires.
- Calculer la moyenne de chaque colonne.
- Centrer la matrice (soustraire la moyenne de chaque colonne à tous les éléments de cette colonne) en une seule opération vectorisée.
- Calculer l'écart-type de chaque colonne.
- Normaliser la matrice centrée (diviser par l'écart-type de chaque colonne).
Corrigé
import numpy as np
np.random.seed(42)
# 1. Matrice 5x3 aléatoire
X = np.random.rand(5, 3) * 10
print("Matrice originale X :")
print(X)
print()
# 2. Moyenne par colonne
moyennes = np.mean(X, axis=0)
print(f"Moyennes par colonne : {moyennes}")
print()
# 3. Centrage (broadcasting)
X_centre = X - moyennes # moyennes est (3,) broadcasté sur (5,3)
print("Matrice centrée :")
print(X_centre)
print(f"Moyennes après centrage : {np.mean(X_centre, axis=0)}")
print()
# 4. Écart-type par colonne
ecarts = np.std(X_centre, axis=0)
print(f"Écarts-type par colonne (avant normalisation) : {ecarts}")
print()
# 5. Normalisation
X_norm = X_centre / ecarts # broadcasting
print("Matrice normalisée (moyenne 0, écart-type 1) :")
print(X_norm)
print(f"Moyennes : {np.mean(X_norm, axis=0)}")
print(f"Écarts-type : {np.std(X_norm, axis=0)}")
L'exécution de ce script affiche :
Matrice originale X :
[[3.74540119 9.50714306 7.31993942]
[5.98658484 1.56018641 1.55994519]
[0.58083613 8.66176145 6.01115005]
[7.08072578 0.20584491 9.69909852]
[2.12339114 1.8182497 8.32442641]]
Moyennes par colonne : [3.90338782 4.35063711 6.58291192]
Matrice centrée :
[[-0.15798663 5.15650595 0.7370275 ]
[ 2.08319702 -2.7904507 -5.02296673]
[-3.32255169 4.31112434 -0.57176187]
[ 3.17733797 -4.1447922 3.1161866 ]
[-1.77999683 -2.53238741 1.74151449]]
Moyennes après centrage : [ 0.00000000e+00 -2.22044605e-16 0.00000000e+00]
Écarts-type par colonne (avant normalisation) : [2.37424451 3.40065757 5.0934149 ]
Matrice normalisée (moyenne 0, écart-type 1) :
[[-0.06653721 1.5163275 0.26798725]
[ 0.87720991 -0.82057754 -1.82644768]
[-1.39943139 1.26790274 -0.20792193]
[ 1.33825218 -1.21891426 1.13322297]
[-0.74949348 -0.74473843 0.63315939]]
Moyennes : [ 0.00000000e+00 -1.11022302e-16 5.55111512e-17]
Écarts-type : [1. 1. 1.]100 % gratuit
La suite du chapitre est sur Adloun
- 7 autres exercices corrigés dans ce chapitre, et 7 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.