Le masking dans Numpy est une technique puissante qui nous permet de manipuler des tableaux à l'aide de conditions logiques. Ce mécanisme repose sur l'idée de créer un masque, c'est-à-dire un tableau de booléens, que l'on peut utiliser pour sélectionner ou modifier certaines valeurs d'un autre tableau.
Prenons un exemple simple en Python, en dehors de Numpy, pour illustrer l'idée :
liste = [1, 2, 3]
liste[True]
Ce code retourne une erreur ou un comportement inattendu selon la version de Python, car ici, True est interprété comme l'index 1. En effet :
int(True)
# 1
Donc, en écrivant liste[True]
, nous accédons à l'élément à l'index 1 de la liste, c'est-à-dire :
liste[True]
# 2
Cette logique d'interprétation des booléens comme des entiers (où False vaut 0 et True vaut 1) est également à la base du fonctionnement du masking dans Numpy, mais à une échelle bien plus puissante.
Application des masques booléens
En Numpy, nous pouvons créer des tableaux de booléens correspondant à des conditions sur un tableau initial, puis utiliser ce masque pour extraire ou modifier les éléments correspondants.
Voici un exemple :
import numpy as np
a = np.array([10, 20, 30, 40, 50])
mask = a > 25
print(mask)
print(a[mask])
# [False False True True True]
# [30 40 50]
Nous voyons ici que le tableau mask
contient des booléens : True là où la condition a > 25
est vraie, et False ailleurs. En indexant a avec ce masque, nous obtenons seulement les valeurs qui satisfont cette condition.
Ce concept est central dans les traitements de données avec Numpy, car il nous permet d'appliquer des opérations de manière vectorisée, sans avoir besoin de boucles explicites.