Numpy-Where-Funktion mit mehreren Bedingungen
Beim Umgang mit Arrays kann die Funktion np.where in NumPy ein nützliches Werkzeug zur Auswahl spezifischer Elemente sein Elemente basierend auf bestimmten Bedingungen. Allerdings kann es zu Verwirrung kommen, wenn versucht wird, mehrere Bedingungen gleichzeitig anzuwenden.
Bedenken Sie das in der Frage dargestellte Szenario: Das Ziel besteht darin, Entfernungen innerhalb eines bestimmten Bereichs aus einem Array namens dists auszuwählen. Der folgende Code wurde versucht:
dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]
Dieser Code wählt jedoch nur Abstände aus, die kleiner oder gleich r dr sind, nicht beide Bedingungen. Um zu verstehen, warum dies geschieht, ist es wichtig zu beachten, dass np.where eine Liste von Indizes und kein boolesches Array zurückgibt.
Korrektur des Codes
Der richtige Weg dazu Anwenden mehrerer Bedingungen mit np.where besteht darin, ein kombiniertes boolesches Array mit elementweisen Operatoren (& für UND, | für ODER) zu erstellen, wie unten gezeigt:
dists[(dists >= r) & (dists <= r + dr)]
Oder, wenn das Ergebnis speziell benötigt wird Verwenden Sie in Form von Indizes die folgende Syntax:
np.where((dists >= r) & (dists <= r + dr))
Warum der ursprüngliche Code nicht funktionierte
Die in der ursprünglichen Frage enthaltene Codesequenz bewertete zwei Trennen Sie die Bedingungen unabhängig voneinander: zuerst Abstände größer oder gleich r und dann Abstände kleiner oder gleich r dr. Da np.where jedoch Indizes zurückgibt, führte die Verkettung der Ergebnisse dieser beiden Bedingungen mit und zur Auswahl nur der Indizes aus der zweiten Bedingung.
Um ein boolesches Array zu erstellen, das die Bedingungen elementweise kombiniert Operatoren verwendet werden. Dadurch wird sichergestellt, dass jedes Element im Array basierend auf beiden Bedingungen gleichzeitig entweder wahr oder falsch ist.
Alternativer Ansatz
Eine alternative Methode zum Auswählen von Abständen innerhalb eines Bereichs ist: Verwenden Sie die bedingte Indizierung, wie unten gezeigt:
dists[abs(dists - (r + dr / 2.)) <= dr / 2.]
Diese Option bietet eine präzisere und lesbarere Lösung, indem ein boolesches Array erstellt wird, das prüft, ob jeder Abstand innerhalb eines Bereichs liegt, der bei r zentriert ist.
Das obige ist der detaillierte Inhalt vonWie kann ich die Funktion „np.where' von NumPy verwenden, um Elemente basierend auf mehreren Bedingungen auszuwählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!