Filterelemente in einem NumPy-Array

Vaibhav Vaibhav 22 Juni 2021
  1. Filtern von Elementen mit der Methode fromiter() in NumPy
  2. Filtern von Elementen mithilfe der Booleschen Maskenschneidemethode in NumPy
  3. Filtern von Elementen mit der Methode where() in NumPy
Filterelemente in einem NumPy-Array

Oft benötigen wir Werte aus einem Array in einer bestimmten Reihenfolge, normalerweise entweder in aufsteigender oder absteigender Reihenfolge. Manchmal müssen wir auch Elemente aus einem Array suchen und abrufen oder einige Werte basierend auf bestimmten Bedingungen filtern.

In diesem Artikel wird beschrieben, wie Sie Werte aus einem NumPy-Array filtern.

Filtern von Elementen mit der Methode fromiter() in NumPy

fromiter() erstellt ein neues eindimensionales Array aus einem iterierbaren Objekt, das als Argument übergeben wird. Wir können Bedingungen auf die Eingabearrayelemente anwenden und dieser Funktion das neue Array zuweisen, um die gewünschten Elemente in einem NumPy-Array zu erhalten.

Die Syntax der Methode fromiter() ist unten angegeben.

fromiter(iterable, dtype, count, like)

Es hat die folgenden Parameter.

  • iterable - Ein iterierbares Objekt, über das die Funktion iteriert.
  • dtype - Dieser Parameter bezieht sich auf den Datentyp des zurückgegebenen Arrays.
  • count - Dies ist ein optionaler ganzzahliger Parameter, der sich auf die Anzahl der Elemente bezieht, die im iterierbaren Objekt gelesen werden. Der Standardwert dieses Parameters ist -1, was bedeutet, dass alle Elemente gelesen werden.
  • like - Dies ist ein optionaler boolescher Parameter. Es steuert die Definition des zurückgegebenen Arrays.

Die Methode zum Filtern von Elementen mit der Methode fromiter() in NumPy ist wie folgt.

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)

Ausgabe:

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

Zuerst initialisieren wir ein NumPy-Array, aus dem wir die Elemente filtern möchten. Dann durchlaufen wir das gesamte Array und filtern die Werte heraus, die kleiner als 6 sind. Dann wandeln wir dieses neue Array in ein NumPy-Array mit demselben Datentyp wie das ursprüngliche Array um.

Weitere Informationen zu dieser Methode finden Sie in der offizielle Dokumentation.

Filtern von Elementen mithilfe der Booleschen Maskenschneidemethode in NumPy

Diese Methode ist etwas seltsam, funktioniert aber in NumPy wie ein Zauber. Wir müssen den Zustand in den eckigen oder kastenförmigen Klammern [] nach dem Array erwähnen. Dann filtert NumPy die Elemente basierend auf der Bedingung heraus und gibt ein neues gefiltertes Array zurück.

Dieses Konzept ist möglicherweise nicht klar und erscheint einigen sogar schwierig, aber keine Sorge. Wir haben einige Beispiele unten, um es ein wenig besser zu erklären.

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)

Ausgabe:

[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]

Wie oben erwähnt, fügen wir einige Bedingungen zwischen den eckigen Klammern hinzu, und das Zielarray wurde basierend auf diesen Bedingungen gefiltert. Die Variable, die das Array speichert, in diesem Fall myArray, repräsentiert ein einzelnes Element des Arrays in eckigen Klammern.

Um mehrere Bedingungen anzuwenden und logische Operatoren zu verwenden, verwenden wir zwei NumPy-Methoden, nämlich logisch_und() und logisch_oder() für die Logik und oder oder.

  • myArray < 6 - Filtert die Werte, die kleiner als 6 sind
  • myArray % 2 == 0 - Filtert die durch 2 teilbaren Werte
  • myArray % 2 != 0 - Filtert die Werte, die nicht durch 2 teilbar sind
  • np.logical_and(myArray > 1, myArray < 5) - Filtert die Werte größer als eins und kleiner als fünf.
  • np.logical_or(myArray % 2 == 0, myArray < 5) - Filtert die Werte, die entweder durch zwei oder weniger als fünf teilbar sind.

Filtern von Elementen mit der Methode where() in NumPy

Hier ist die letzte Methode, die die Methode where() aus der NumPy-Bibliothek verwendet. Es filtert die Elemente aus dem Zielarray basierend auf einer Bedingung und gibt die Indizes der gefilterten Elemente zurück.

Mit dieser Methode können Sie auch die Werte von Elementen ändern, die die Bedingung erfüllen.

Die Syntax der Methode where() ist unten dargestellt.

where(condition, x, y)

Es hat die folgenden Parameter.

  • condition - Dies ist die boolesche Bedingung, auf die jedes Element des Arrays überprüft wird.
  • x - Dies ist ein Wert, der Elementen gegeben wird, die die Bedingung erfüllen, oder eine Berechnung, die von den erfüllenden Elementen ausgeführt wird.
  • y - Dies ist ein Wert, der Elementen gegeben wird, die die Bedingung nicht erfüllen, oder eine Berechnung, die für die nicht erfüllenden Elemente durchgeführt wird.

Mal sehen, wie man mit dieser Funktion die Elemente herausfiltert.

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)

Ausgabe:

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

Im obigen Snippet wurden alle Elemente, die die Bedingung erfüllen, als Array zurückgegeben.

Die Funktion where() gibt ein Tupel von NumPy-Arrays zurück. Wir betrachten also nur das erste Array, das unsere Antwort ist.

Wie oben erwähnt, können Sie auch benutzerdefinierte Werte zuweisen und benutzerdefinierte Aktionen für Elemente ausführen, wenn diese die angegebene Bedingung erfüllen und wenn dies nicht der Fall ist.

Unten ist ein Beispiel dafür.

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)

Ausgabe:

[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]

Schauen Sie sich die Ausgabe an. Sehen Sie, wie sich die Elemente basierend auf Bedingungen und Werten und Berechnungen ändern, die Sie bereitgestellt haben, um die Elemente in die Funktion where() zu ändern.

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.