Numpy-Where-Funktion und mehrere Bedingungen
Diese Frage bezieht sich auf die Numpy-Where-Funktion und die Auswahl von Elementen basierend auf mehreren Bedingungen.
Problem- und Problembeschreibung
Der Benutzer möchte zwei Bedingungen (größer als und kleiner als) anwenden, um Elemente aus einem Array (dists) auszuwählen, die in einen bestimmten Bereich fallen. Die Verwendung der Where-Funktion als (np.where(dists >= r)) und (np.where(dists <= r dr)) führt jedoch zu unerwarteten Ergebnissen.
Lösung
Methode 1: Bedingungen zu einem einzigen Kriterium kombinieren
In diesem speziellen Fall wird empfohlen, die beiden Bedingungen zu einem einzigen Kriterium zu kombinieren:
dists[abs(dists - r - dr/2.) <= dr/2.]
Dieser unkomplizierte Ansatz prüft, ob der absolute Wert der Differenz zwischen dists und dem Bereichszentrum (r dr/2) kleiner oder gleich der Hälfte der Bereichsbreite (dr/2) ist.
Methode 2: Verwenden von Fancy Indexing
Alternativ kann man Fancy Indexing verwenden, um Elemente mithilfe einer booleschen Maske direkt aus dem ursprünglichen Array auszuwählen:
dists[(dists >= r) & (dists <= r + dr)]
Der Vorteil davon Die Methode besteht darin, dass sie elementweise logische Operatoren (& und |) verwendet, um die Bedingungen zu kombinieren, was zu einer binären Maske führt, die die Elemente identifiziert, die die Kriterien erfüllen.
Erklärung des Problems
Der ursprüngliche Ansatz mit (np.where(dists >= r)) und (np.where(dists <= r dr)) schlägt fehl, weil np.where eine Liste von Indizes und kein boolesches Array zurückgibt. Das Anding zwischen zwei Zahlenlisten führt zur Auswertung der zweiten Liste und nicht zu einem logischen Vergleich.
Das obige ist der detaillierte Inhalt vonWie wähle ich mithilfe der Funktion „where' Elemente aus einem Numpy-Array aus, die mehrere Bedingungen erfüllen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!