Éléments filtrants dans un tableau NumPy

Vaibhav Vaibhav 30 janvier 2023
  1. Eléments filtrants utilisant la méthode fromiter() dans NumPy
  2. Filtrer les éléments à l’aide de la méthode de découpage de masque booléen dans NumPy
  3. Filtrer les éléments en utilisant la méthode where() dans NumPy
Éléments filtrants dans un tableau NumPy

Souvent, nous avons besoin des valeurs d’un tableau dans un ordre spécifique, généralement dans un ordre croissant ou décroissant. Parfois, nous devons également rechercher des éléments dans un tableau et les récupérer ou filtrer certaines valeurs en fonction de certaines conditions.

Cet article présentera comment filtrer les valeurs d’un tableau NumPy.

Eléments filtrants utilisant la méthode fromiter() dans NumPy

fromiter() crée un nouveau tableau unidimensionnel à partir d’un objet itérable qui est passé en argument. Nous pouvons appliquer des conditions aux éléments du tableau d’entrée et donner en outre ce nouveau tableau à cette fonction pour obtenir les éléments souhaités dans un tableau NumPy.

La syntaxe de la méthode fromiter() est ci-dessous.

fromiter(iterable, dtype, count, like)

Il a les paramètres suivants.

  • iterable - Un objet itérable sur lequel la fonction va itérer.
  • dtype - Ce paramètre fait référence au type de données du tableau retourné.
  • count - Ceci est un paramètre entier facultatif, et il fait référence au nombre d’éléments qui seront lus dans l’objet itérable. La valeur par défaut de ce paramètre est -1, ce qui signifie que tous les éléments seront lus.
  • like - Ceci est un paramètre booléen optionnel. Il contrôle la définition du tableau retourné.

La manière de filtrer les éléments en utilisant la méthode fromiter() dans NumPy est la suivante.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray = np.fromiter(
    (element for element in myArray if element < 6), dtype=myArray.dtype
)
print(myArray)
print(newArray)

Production:

[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]

Tout d’abord, nous initialisons un tableau NumPy à partir duquel nous souhaitons filtrer les éléments. Ensuite, nous parcourons tout le tableau et filtrons les valeurs inférieures à 6. Ensuite, nous convertissons ce nouveau tableau en un tableau NumPy avec le même type de données que celui du tableau d’origine.

Pour en savoir plus sur cette méthode, reportez-vous à sa documentation officielle

Filtrer les éléments à l’aide de la méthode de découpage de masque booléen dans NumPy

Cette méthode est un peu bizarre mais fonctionne comme un charme dans NumPy. Nous devons mentionner la condition entre les crochets [] après le tableau. Ensuite, NumPy filtrera les éléments en fonction de la condition et renverra un nouveau tableau filtré.

Ce concept n’est peut-être pas clair et peut même sembler délicat pour certains, mais ne vous inquiétez pas. Nous avons quelques exemples ci-dessous pour l’expliquer un peu mieux.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = myArray[myArray < 6]  # Line 1
newArray2 = myArray[myArray % 2 == 0]  # Line 2
newArray3 = myArray[myArray % 2 != 0]  # Line 3
newArray4 = myArray[np.logical_and(myArray > 1, myArray < 5)]  # Line 4
newArray5 = myArray[np.logical_or(myArray % 2 == 0, myArray < 5)]  # Line 5
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
print(newArray4)
print(newArray5)

Production:

[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]
[2 4 6 8]
[1 3 5 7 9]
[2 3 4]
[1 2 3 4 6 8]

Comme mentionné ci-dessus, nous ajoutons certaines conditions entre les crochets et le tableau cible a été filtré en fonction de ces conditions. La variable stockant le tableau, qui est dans ce cas myArray, représente un seul élément du tableau entre crochets.

Pour appliquer plusieurs conditions et utiliser des opérateurs logiques, nous utilisons deux méthodes NumPy, à savoir, logical_and() et logical_or() pour la logique et ou ou respectivement.

  • myArray < 6 - Il filtre les valeurs inférieures à 6
  • myArray % 2 == 0 - Il filtre les valeurs divisibles par 2
  • myArray % 2 != 0 - Il filtre les valeurs qui ne sont pas divisibles par 2
  • np.logical_and(myArray > 1, myArray < 5) - Il filtre les valeurs supérieures à un et inférieures à cinq.
  • np.logical_or(myArray % 2 == 0, myArray < 5) - Il filtre les valeurs qui sont soit divisibles par deux, soit inférieures à cinq.

Filtrer les éléments en utilisant la méthode where() dans NumPy

Voici la dernière méthode, qui utilise la méthode where() de la bibliothèque NumPy. Il filtre les éléments du tableau cible en fonction d’une condition et renvoie les index des éléments filtrés.

Vous pouvez également utiliser cette méthode pour modifier les valeurs des éléments qui satisfont à la condition.

La syntaxe de la méthode where() est présentée ci-dessous.

where(condition, x, y)

Il a les paramètres suivants.

  • condition - C’est la condition booléenne pour laquelle chaque élément du tableau est vérifié.
  • x - C’est une valeur donnée à des éléments satisfaisant la condition ou un calcul effectué sur les éléments satisfaisants.
  • y - C’est une valeur donnée à des éléments ne satisfaisant pas la condition ou un calcul effectué sur les éléments non satisfaisants.

Voyons comment utiliser cette fonction pour filtrer les éléments.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = myArray[np.where(myArray < 7)[0]]
newArray2 = myArray[np.where(myArray % 2 == 0)[0]]
newArray3 = myArray[np.where(myArray % 2 != 0)[0]]
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)

Production:

[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6]
[2 4 6 8]
[1 3 5 7 9]

Dans l’extrait de code ci-dessus, tous les éléments qui satisfont à la condition ont été renvoyés sous forme de tableau.

La fonction where() renvoie un tuple de tableaux NumPy. Nous ne considérons donc que le premier tableau, qui est notre réponse.

Comme je l’ai mentionné ci-dessus, vous pouvez également attribuer des valeurs personnalisées et effectuer des actions personnalisées sur des éléments lorsqu’ils satisfont à la condition spécifiée et quand ils ne le sont pas.

Voici un exemple de cela.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = np.where(myArray < 7, 5, -1)
newArray2 = np.where(myArray % 2 == 0, myArray ** 2, 0)
newArray3 = np.where(myArray % 2 != 0, myArray, -1)
newArray4 = np.where(myArray % 2 != 0, myArray, myArray)
newArray5 = np.where(myArray % 2 != 0, 0, myArray)
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
print(newArray4)
print(newArray5)

Production:

[1 2 3 4 5 6 7 8 9]
[ 5  5  5  5  5  5 -1 -1 -1]
[ 0  4  0 16  0 36  0 64  0]
[ 1 -1  3 -1  5 -1  7 -1  9]
[1 2 3 4 5 6 7 8 9]
[0 2 0 4 0 6 0 8 0]

Jetez un œil à la sortie. Voyez comment les éléments changent en fonction des conditions et en fonction des valeurs et des calculs que vous avez fournis pour manipuler les éléments vers la fonction where().

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.