Indexation avancée
Le slicing de base fonctionne bien pour les régions contiguës, mais parfois vous avez besoin de sélections plus complexes. NumPy propose deux techniques puissantes d'indexation avancée :
Indexation par Tableau d'Entiers (Integer Array Indexing)
Sélectionnez des éléments arbitraires en fournissant un tableau d'indices. C'est comme choisir des éléments spécifiques dans une liste en utilisant leurs positions.
Exemple concret : Vous avez des notes d'examen et vous souhaitez vérifier les notes des étudiants aux positions 3, 7 et 12 :
scores = np.array([85, 92, 78, 95, 88, 76, 91, 89, 84, 93, 87, 90, 82])
student_positions = [3, 7, 12] ## Étudiants qui vous intéressent
selected_scores = scores[student_positions] ## [95, 89, 82]
Indexation par Tableau Booléen (Masquage)
Sélectionnez des éléments en fonction de conditions. Créez un "masque" de valeurs Vrai/Faux, puis utilisez-le pour filtrer le tableau.
Exemple concret : Filtrez les notes de réussite (≥ 80) d'une classe :
scores = np.array([85, 92, 78, 95, 88, 76, 91, 89, 84, 93])
passing_mask = scores >= 80 ## [True, True, False, True, True, False, True, True, True, True]
passing_scores = scores[passing_mask] ## [85, 92, 95, 88, 91, 89, 84, 93]
Pourquoi c'est important
- Indexation par entiers : Parfait pour échantillonner des points de données spécifiques
- Indexation booléenne : Idéal pour le filtrage de données et les sélections conditionnelles
- Les deux créent des copies (pas des vues), donc les modifications n'affectent pas le tableau original
Essayons les deux. Remplacez le contenu de indexing_practice.py par le code suivant :
import numpy as np
## --- Indexation par Tableau d'Entiers ---
x = np.arange(10, 0, -1)
print("Tableau pour l'indexation par entiers :", x)
## Sélectionne les éléments aux indices 3, 3, 1 et 8
selected_elements = x[np.array([3, 3, 1, 8])]
print("Éléments sélectionnés avec un tableau d'entiers :", selected_elements)
## --- Indexation par Tableau Booléen ---
y = np.array([1., -1., -2., 3.])
print("\nTableau pour l'indexation booléenne :", y)
## Crée un masque booléen pour les éléments négatifs
mask = y < 0
print("Masque booléen (y < 0) :", mask)
## Sélectionne les éléments où la condition est Vraie
negative_elements = y[mask]
print("Éléments où y < 0 :", negative_elements)
Enregistrez le fichier et exécutez le script :
python indexing_practice.py
Votre sortie devrait démontrer comment l'indexation par entiers et l'indexation booléenne fonctionnent pour sélectionner des données spécifiques de vos tableaux.
Tableau pour l'indexation par entiers : [10 9 8 7 6 5 4 3 2 1]
Éléments sélectionnés avec un tableau d'entiers : [7 7 9 2]
Tableau pour l'indexation booléenne : [ 1. -1. -2. 3.]
Masque booléen (y < 0) : [False True True False]
Éléments où y < 0 : [-1. -2.]