HOWTO · NumPy
Trouver le premier index d'élément dans NumPy Array
Ce tutoriel montre comment trouver l'index d'un élément dans un tableau en python
Sur cette page
Pour trouver le premier indice d’une valeur dans un tableau NumPy à une dimension, utilisez np.where(array == value)[0][0] lorsqu’une correspondance est garantie. Cette expression renvoie la première position correspondante ; vérifiez la présence de la valeur si elle peut être absente. Les indices NumPy commencent à zéro.
Trouver le premier indice correspondant avec np.where()
np.where(condition) renvoie un tuple contenant un tableau d’indices pour chaque dimension. Pour un tableau à une dimension, le premier élément du tuple contient les positions correspondantes. Sélectionnez son premier élément pour obtenir la première correspondance.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import numpy as np
values = np.array([10, 20, 30, 40, 50, 20])
target = 20
matches = np.where(values == target)[0]
print(int(matches[0]))
1
Ici, matches contient les deux positions où apparaît 20, et matches[0] sélectionne la première. Si aucune valeur ne correspond, matches ne contient aucun élément : tenter d’en sélectionner un déclenche IndexError. Vérifiez matches.size avant de sélectionner un indice si une correspondance n’est pas garantie. La forme à trois arguments, np.where(condition, x, y), sélectionne plutôt des valeurs dans x ou y ; ce n’est pas la forme qui renvoie des indices présentée ici.
Utiliser np.nonzero() pour trouver les indices correspondants
Pour une condition booléenne, np.nonzero() renvoie les indices des éléments vrais. Comme la forme à un argument de np.where(), cette fonction renvoie un tuple de tableaux d’indices, un par dimension du tableau. Pour un tableau à une dimension, prenez le premier tableau du tuple.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import numpy as np
values = np.array([4, 7, 4, 9])
positions = np.nonzero(values == 4)[0]
print(positions.tolist())
Le résultat contient toutes les positions correspondantes, dans l’ordre du tableau. N’utilisez positions[0] pour obtenir la première correspondance qu’après avoir vérifié que le tableau n’est pas vide. Pour un tableau multidimensionnel, chaque élément du tuple contient les coordonnées d’une dimension ; associez les éléments correspondants pour repérer chaque correspondance.
Utiliser np.argmax() pour repérer une correspondance booléenne
np.argmax() renvoie la position de la valeur la plus élevée. Appliquée à un masque booléen, la fonction renvoie la position du premier True, car True est supérieur à False. Un masque entièrement faux renvoie également 0 : vérifiez donc qu’il existe une correspondance avant d’utiliser le résultat.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import numpy as np
values = np.array([5, 8, 3, 8])
mask = values == 8
first = int(np.argmax(mask)) if np.any(mask) else None
print(first)
Cette méthode renvoie None si la valeur recherchée est absente, et sa première position correspondante dans le cas contraire. Pour obtenir toutes les positions correspondantes, utilisez plutôt np.where() ou np.nonzero().
Utiliser list.index() après avoir converti le tableau
La conversion d’un tableau à une dimension en liste Python permet d’utiliser la méthode de liste list.index(). Elle renvoie la première occurrence. Cette conversion crée une liste Python et entraîne donc un surcoût en temps et en mémoire ; cette approche est généralement plus pratique pour les petits tableaux ou dans du code qui utilise déjà des listes.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import numpy as np
values = np.array([10, 20, 30, 20])
items = values.tolist()
target = 20
index = items.index(target) if target in items else None
print(index)
La vérification d’appartenance indique explicitement l’absence de la valeur en renvoyant None ; appeler directement items.index(target) lorsque la valeur est absente déclenche ValueError. La vérification et la recherche parcourent chacune la liste. Pour une seule recherche, vous pouvez plutôt intercepter ValueError autour de list.index().
Utiliser une boucle pour appliquer une logique personnalisée
Une boucle est utile lorsqu’il faut appliquer à chaque élément un test personnalisé difficile à exprimer sous forme de condition NumPy vectorisée. Initialisez le résultat avec une valeur indiquant qu’aucune correspondance n’a été trouvée, puis arrêtez la boucle dès la première correspondance.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import numpy as np
values = np.array([12, 15, 18, 21])
index = None
for position, value in enumerate(values):
if value % 2 == 0 and value > 12:
index = position
break
print(index)
La boucle examine les éléments un par un et s’arrête dès qu’une valeur satisfait les deux conditions. Pour une simple comparaison d’égalité, un masque NumPy est généralement plus concis ; utilisez une boucle lorsque la règle de correspondance nécessite des branchements ou un état personnalisé.
Gérer les absences, les répétitions et les dimensions du tableau
Choisissez la forme du résultat en fonction de votre tâche :
- Pour la première correspondance dans un tableau à une dimension, obtenez les positions avec
np.where()ounp.nonzero(), vérifiez qu’il en existe au moins une, puis sélectionnez la première. - Pour obtenir toutes les correspondances, conservez le tableau complet d’indices. Des valeurs répétées produisent plusieurs positions ; ne sélectionnez pas
[0]si vous en avez besoin de toutes. - Pour un tableau à deux dimensions,
np.where(matrix == target)renvoie(row_indices, column_indices). Les éléments correspondants forment des paires de coordonnées. Par exemple,(rows[0], columns[0])donne la ligne et la colonne de la première correspondance, et non un indice unique dans le tableau aplati. - Si vous avez précisément besoin d’une position aplatie dans un tableau multidimensionnel, aplatissez d’abord le tableau et recherchez la valeur dans le résultat. Si nécessaire, convertissez cette position aplatie en coordonnées avec
np.unravel_index(). - Pour un masque non vide entièrement faux,
np.argmax()renvoie zéro, mais cette position ne signale aucune correspondance. Si le masque est vide,np.argmax()déclenche plutôtValueError. L’expression protégée ci-dessus vérifie d’abordnp.any(mask)et renvoie doncNoneaussi bien pour un masque sans valeur vraie que pour un masque vide.
Pour rechercher des valeurs dans un tableau numérique courant, np.where() convient directement lorsque vous avez besoin de la première correspondance ou de toutes les correspondances. Utilisez np.nonzero() pour obtenir les mêmes positions satisfaisant une condition vraie, np.argmax() sur un masque booléen après vérification, list.index() lorsqu’une liste Python est déjà utile, et une boucle pour appliquer une règle de correspondance personnalisée.