Au-delà du slicing classique, NumPy permet deux types d'indexation puissants :
- fancy indexing : avec une LISTE d'index
- indexation booléenne : avec un masque True/Falsea = np.array([10, 20, 30, 40, 50, 60, 70])a[[0, 2, 5]] → [10 30 60]
a[[0, 0, 1]] → [10 10 20] (répétitions autorisées)
a[[-1, -2]] → [70 60]# En 2D, on peut indexer ligne et colonne
M = np.arange(16).reshape(4, 4)
M[[0, 2], [1, 3]] → [M[0,1], M[2,3]] = [1, 11]Un masque = un array de booléens de même forme que les données :
a = np.array([10, 20, 30, 40, 50])
mask = a > 30 # [False False False True True]
a[mask] # [40 50]# En une ligne
a[a > 30] # [40 50]Combiner conditions avec & | ~ (parenthèses obligatoires) :
a[(a > 20) & (a < 50)] → [30 40]
a[~(a > 30)] → [10 20 30] (négation)np.diag(M) → vecteur des éléments diagonaux
np.diag([1,2,3]) → matrice diagonale
np.triu(M) → triangle supérieur (au-dessus diagonale)
np.tril(M) → triangle inférieura = np.array([10, 20, 30, 40, 50, 60, 70])print('Fancy:', a[[0, 2, 5]]) # [10 30 60]
print('Mask :', a > 30) # bool array
print('Filtrés:', a[a > 30]) # [40 50 60 70]M = np.arange(16).reshape(4, 4)
print('Diagonale:', np.diag(M)) # [0 5 10 15]
print('Triangle sup:\n', np.triu(M))L'indexation booléenne est l'idiome NumPy le plus puissant pour filtrer sans boucle. C'est aussi la base du filtrage Pandas (df[df.col > 5]).
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →