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() ou np.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ôt ValueError. L’expression protégée ci-dessus vérifie d’abord np.any(mask) et renvoie donc None aussi 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.