La fonction np.where() permet de tra­vail­ler de manière ciblée avec des tableaux NumPy en Python. Grâce à ses opé­ra­tions vec­to­ri­sées, elle est plus efficace que les méthodes basées sur des boucles.

Fonction np.where() en Python : à quoi ça sert ?

La fonction np.where() en Python est une méthode puissante de la bi­blio­thèque NumPy, adaptée à la sélection con­di­tion­nelle d’éléments dans un tableau. Elle identifie et extrait les éléments qui répondent à une certaine condition et renvoie les indices ou les valeurs qui cor­res­pon­dent à cette condition.

La fonction np.where() est utilisée dans dif­fé­rents domaines, notamment le trai­te­ment des données, le calcul scien­ti­fique, l’ap­pren­tis­sage au­to­ma­tique (machine learning) et l’analyse des données. Dans la ma­ni­pu­la­tion de données, np.where() permet de filtrer des données sur la base de certains critères et de remplacer des valeurs dans des tableaux.

Python np.where() : syntaxe

La fonction np.where() accepte un tableau de type NumPy, composé par exemple d’entiers ou de valeurs boo­léennes. La syntaxe de la fonction np.where() en Python se présente comme suit :

import numpy as np
np.where(condition[, x, y])
python
  • condition : c’est la condition qui est appliquée au tableau pour dé­ter­mi­ner les éléments qui doivent être sé­lec­tion­nés.
  • x et y (fa­cul­ta­tif) : si seule condition est indiquée, np.where() renvoie les indices des éléments qui rem­plis­sent la condition. Si x et y sont spécifiés, les valeurs de x sont renvoyées si la condition est remplie, et les valeurs de y dans le cas contraire.

La fonction np.where() renvoie en résultat un nouveau tableau NumPy. Ce nouveau tableau est créé en filtrant ou en sé­lec­tion­nant des éléments du tableau original, sur la base d’une condition. Dans ce cas, chaque valeur True ou False dans ce tableau de con­di­tions cor­res­pond à la sélection ou au filtrage de l’élément cor­res­pon­dant dans le tableau d’origine.

Exemple d’uti­li­sa­tion de np.where()

La méthode np.where() est un outil ex­trê­me­ment po­ly­va­lent en raison de sa capacité à effectuer des opé­ra­tions con­di­tion­nelles sur des tableaux. Elle est très adaptée à la ma­ni­pu­la­tion de données.

Remplacer des éléments dans un tableau NumPy

La fonction np.where() de NumPy permet de remplacer des éléments dans un tableau en se basant sur une condition. Pour cela, vous pouvez convertir des listes Python en un tableau avec np.array() :

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
python

Nous voulons main­te­nant définir une condition pour iden­ti­fier les éléments qui sont plus grands que 3. Pour cela, il faut créer un masque de condition, True, pour les éléments qui sont plus grands que 3 et un masque False pour ceux qui ne le sont pas.

condition = arr > 3
python

Ensuite, nous utilisons np.where() et indiquons cette condition. On précise alors que les valeurs qui cor­res­pon­dent à la condition sont rem­pla­cées par -1, tandis que toutes les autres valeurs sont rem­pla­cées par 0 :

new_arr = np.where(condition, -1, 0)
python

Le résultat, new_arr, contient le tableau modifié après le rem­pla­ce­ment selon la condition. La sortie montrera que les valeurs su­pé­rieures à 3 ont été rem­pla­cées par -1, tandis que les autres valeurs ont été rem­pla­cées par 0 :

print(new_arr)
# Output: [0 0 0 -1 -1]
python

Utiliser np.where() avec une seule condition

Si numpy.where() est utilisé avec seulement une condition et sans donner de valeurs de rem­pla­ce­ment, il renvoie un tuple d’indices où la condition est True.

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
condition = arr > 2
result = np.where(condition)
print(result)
# Output: (array([2, 3, 4]),)
python

Dans cet exemple, arr est un tableau NumPy contenant des valeurs de 1 à 5. condition = arr > 2 crée un masque booléen qui identifie les éléments de arr qui sont plus grands que 2. np.where(condition) est appelé sans spécifier de valeurs de rem­pla­ce­ment. Cela renvoie un tuple d’indices pour lesquels la condition arr > 2 est remplie. Le résultat sera un tableau d’indices où les éléments de arr sont su­pé­rieurs à 2.

Diffusion avec np.where()

La diffusion dans NumPy permet des opé­ra­tions entre des tableaux de formes dif­fé­rentes, tant que certaines règles sont res­pec­tées. Si des tableaux ont des formes dif­fé­rentes, NumPy essaie de les agrandir de manière à les rendre com­pa­tibles.

Supposons que nous ayons un tableau NumPy arr de la forme (3, 3) :

import numpy as np
arr = np.array([[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]])
python

Et que nous ayons un autre tableau NumPy row de la forme (3,) :

row = np.array([10, 11, 12])
python

On constate que la forme de arr (3, 3) et la forme de row (3,) sont dif­fé­rentes. Bien qu’elles ne cor­res­pon­dent pas exac­te­ment, la diffusion peut être utilisée pour effectuer une opération entre ces tableaux.

Nous voulons main­te­nant ad­di­tion­ner les valeurs de chaque ligne de arr avec les valeurs de row. C’est là que la diffusion entre en jeu :

result = arr + row
print(result)
# Output: [[11 13 15]
    [14 16 18]
    [17 19 21]]
python

La matrice uni­di­men­sion­nelle row a été agrandie en une matrice (3, 3) pour cor­res­pondre à la forme de arr en la répétant sur les lignes. Ensuite, les éléments de arr et row ont été ad­di­tion­nés élément par élément.

Hé­ber­ge­ment Web
Hé­ber­ge­ment Web de pointe au meilleur prix
  • 3x plus rapide, 60 % d'éco­no­mie
  • Haute dis­po­ni­bi­lité >99,99 %
  • Seulement chez IONOS : jusqu'à 500 Go inclus
Aller au menu principal