Éléments filtrants dans un tableau NumPy
-
Eléments filtrants utilisant la méthode
fromiter()
dans NumPy - Filtrer les éléments à l’aide de la méthode de découpage de masque booléen dans NumPy
-
Filtrer les éléments en utilisant la méthode
where()
dans 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.
pythonCopyfromiter(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.
pythonCopyimport 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:
textCopy[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.
pythonCopyimport 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:
textCopy[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 à 6myArray % 2 == 0
- Il filtre les valeurs divisibles par 2myArray % 2 != 0
- Il filtre les valeurs qui ne sont pas divisibles par 2np.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.
pythonCopywhere(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.
pythonCopyimport 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:
textCopy[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.
pythonCopyimport 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:
textCopy[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()
.