Numpy-Where-Funktion mit mehreren Bedingungen
In Numpy ermöglicht die Where-Funktion das Filtern eines Arrays basierend auf einer Bedingung. Wenn Sie jedoch versuchen, mehrere Bedingungen mit logischen Operatoren wie & und | anzuwenden, können unerwartete Ergebnisse auftreten.
Beachten Sie den folgenden Code:
import numpy as np dists = np.arange(0, 100, 0.5) r = 50 dr = 10 # Attempt to select distances within a range result = dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]
Dieser Code versucht, Abstände zwischen r und auszuwählen r Dr. Es werden jedoch nur Abstände ausgewählt, die die zweite Bedingung erfüllen, dists <= r dr.
Fehlergrund:
Die Numpy-Where-Funktion gibt Indizes von Elementen zurück, die eine Bedingung erfüllen, keine booleschen Arrays. Bei der Kombination mehrerer where-Anweisungen mithilfe logischer Operatoren ist die Ausgabe eine Liste von Indizes, die die jeweiligen Bedingungen erfüllen. Das Ausführen einer UND-Operation für diese Listen führt zum zweiten Satz von Indizes und ignoriert effektiv die erste Bedingung.
Korrekte Ansätze:
Um mehrere Bedingungen anzuwenden, verwenden Sie elementweise Vergleiche direkt:
dists[(dists >= r) & (dists <= r + dr)]
Alternativ können Sie boolesche Arrays für jede Bedingung erstellen und logische Operationen daran ausführen:
condition1 = dists >= r condition2 = dists <= r + dr result = dists[condition1 & condition2]
Die ausgefallene Indizierung ermöglicht auch eine bedingte Filterung:
result = dists[(condition1) & (condition2)]
In bestimmten Fällen kann die Vereinfachung der Bedingungen in ein einziges Kriterium von Vorteil sein, wie im folgenden Beispiel:
result = dists[abs(dists - r - dr/2.) <= dr/2.]
Nach Wenn Programmierer das Verhalten der Where-Funktion verstehen, können sie Arrays basierend auf mehreren Bedingungen in Numpy effektiv filtern.
Das obige ist der detaillierte Inhalt vonSo filtern Sie Numpy-Arrays mit mehreren Bedingungen: Warum schlägt „np.where()' fehl und wie erzielt man korrekte Ergebnisse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!