Exercice 59 / 100

NumPy — Masks booléens

Filtre et remplace des valeurs avec des conditions booléennes

Approfondissons les masques booléens : filtrage avancé, remplacement conditionnel, conditions multiples.

Filtrer avec une condition

notes = np.array([8, 15, 3, 18, 12, 6, 14, 9, 20, 7])
reussis = notes[notes >= 10] # [15 18 12 14 20] echoues = notes[notes < 10] # [8 3 6 9 7] print('Nb réussis:', len(reussis)) # 5 print('Moyenne réussis:', notes[notes >= 10].mean()) # 15.8
Un masque booléen ne garde que les éléments qui répondent vrai à la condition : notes[notes >= 10] laisse passer les notes au-dessus de la moyenne et écarte les autres

Conditions combinées

& ET | OU ~ NON

Parenthèses obligatoires :

notes[notes >= 10 & notes <= 15] ❌ priorité de & avant >=

notes[(notes >= 10) & (notes <= 15)] ✅

Exemples

notes[(notes >= 10) & (notes <= 15)] # entre 10 et 15 inclus notes[(notes < 5) | (notes > 18)] # extrêmes notes[~((notes >= 8) & (notes <= 12))] # hors de [8, 12]

Remplacement conditionnel : np.where

np.where(condition, valeur_si_vrai, valeur_si_faux)

Fonctionne comme un if/else vectorisé :

notes = np.array([8, 15, 3, 18, 12]) corrigees = np.where(notes < 10, 10, notes) # < 10 → 10 # → [10, 15, 10, 18, 12]

Utilisé en 1 argument, renvoie les indices où la condition est vraie :

np.where(notes >= 15) → (array([1, 3]),)

Remplacement direct via mask

notes[notes < 10] = 10 # modifie EN PLACE

Compter et tester

(notes >= 10).sum() → nombre de True (5) (notes >= 10).any() → True si au moins un (notes >= 10).all() → True si tous np.count_nonzero(notes >= 10) → équivalent à .sum() sur le masque

(mask).sum() est un idiome très courant pour compter combien d'éléments respectent une condition.

exercise.py

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