API · NumPy
Python Numpy.where() Fonction
La fonction numpy where() vérifie les éléments d'un tableau d'entrée et génère une sortie selon la condition spécifiée.
Sur cette page
numpy.where() propose deux formes qui produisent des résultats différents. Appelée sous la forme numpy.where(condition), la fonction renvoie des tableaux d’indices correspondant aux positions où la condition est vraie. Appelée sous la forme numpy.where(condition, x, y), elle choisit les valeurs de x ou de y élément par élément. Utilisez la première forme pour localiser les correspondances et la seconde pour construire un tableau à partir d’une condition.
Réponse : numpy.where() renvoie des indices ou sélectionne des valeurs
Choisissez la forme avec la seule condition lorsque vous avez besoin des positions, par exemple pour examiner les indices ou les utiliser dans une autre opération. Choisissez la forme à trois arguments lorsque vous voulez obtenir un résultat dont les valeurs dépendent d’un test. La condition détermine quelle branche fournit chaque élément du résultat : si elle est vraie, la valeur vient de x ; si elle est fausse, elle vient de y.
Syntaxe et paramètres de numpy.where()
Les signatures d’appel sont numpy.where(condition) et numpy.where(condition, x, y). L’argument condition est une valeur de type tableau dont les valeurs de vérité déterminent le résultat. Dans la forme à trois arguments, x fournit les valeurs aux positions où la condition est vraie, et y celles où elle est fausse. Fournissez x et y ensemble : ils ne peuvent pas être indiqués séparément. Omettez-les tous les deux si vous voulez obtenir des indices.
Pour plus de détails, consultez la documentation NumPy 1.18 de numpy.where(). Cet article présente les deux formes d’appel et les exemples ci-dessous ; il ne cherche pas à couvrir toutes les combinaisons de formes de tableaux.
Obtenir les indices correspondants avec numpy.where(condition)
Pour une condition à une dimension, le résultat est un tuple d’un seul élément contenant un tableau d’entiers. Ces entiers désignent les positions dans le tableau d’entrée, et non les valeurs qui se trouvent à ces positions. Utilisez directement le tuple pour indexer le tableau d’origine ; prenez son premier élément si vous avez spécifiquement besoin du tableau d’indices.
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([4, 9, 12, 7, 15])
matching_positions = np.where(values > 10)
print(matching_positions)
Avec l’indexation à partir de zéro de Python, cette condition est vraie aux positions 2 et 4. Le tableau d’indices renvoyé indique donc où se trouvent les valeurs correspondantes ; il ne contient pas lui-même 12 et 15.
Sélectionner des valeurs avec numpy.where(condition, x, y)
La forme à trois arguments renvoie les valeurs sélectionnées plutôt que des positions. À chaque position, si la condition est vraie, la valeur correspondante de x est choisie ; si elle est fausse, c’est celle de y. Cette forme est notamment utile pour remplacer les valeurs qui ne satisfont pas un seuil tout en conservant celles qui le respectent.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import numpy as np
scores = np.array([42, 81, 67, 95])
labels = np.where(scores >= 70, "pass", "review")
print(labels)
Ici, chaque note est comparée à 70. Le résultat contient "pass" pour les notes égales ou supérieures au seuil et "review" pour les autres. Ces deux valeurs de remplacement sont fournies, comme l’exige cette forme d’appel. Dans l’exemple inchangé, les libellés restent en anglais.
Utiliser numpy.where() avec des tableaux multidimensionnels
La même règle de sélection s’applique position par position à une condition à deux dimensions. Chaque position du résultat est choisie à la position correspondante de x ou de y. La forme à trois arguments permet ainsi de transformer une matrice tout en conservant son organisation en lignes et en colonnes.
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, 25, 30], [18, 50, 5]])
replacement = np.full(values.shape, -1)
selected = np.where(values > 20, values, replacement)
print(selected)
La condition teste chaque élément. Les valeurs supérieures à 20 sont conservées dans le résultat ; aux autres positions, la valeur correspondante de replacement — -1 — est utilisée. Le résultat conserve l’organisation à deux dimensions du tableau d’entrée.
Combiner des conditions avec numpy.where()
Pour combiner des comparaisons élément par élément, placez chaque comparaison entre parenthèses et reliez-les avec & pour signifier « les deux conditions sont vraies » ou avec | pour signifier « au moins une condition est vraie ». Ces opérateurs s’appliquent aux conditions sous forme de tableaux. Les opérateurs scalaires and et or de Python ne permettent pas de combiner des comparaisons élément par élément sur des tableaux.
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([1, 2, 3, 4, 5])
in_range = (values > 1) & (values < 5)
selected = np.where(in_range, values, 0)
print(selected)
La condition combinée est vraie pour 2, 3 et 4 ; ces valeurs sont donc conservées, tandis que les positions en dehors de cette plage reçoivent 0. Pour tester l’une ou l’autre condition, utilisez | entre des comparaisons entre parenthèses, par exemple (values < 2) | (values > 4). Chaque comparaison crée un tableau de valeurs de vérité, puis numpy.where() applique la branche sélectionnée à chaque position.