Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kombiniere ich effektiv mehrere Bedingungen in der Where-Funktion von NumPy?

Wie kombiniere ich effektiv mehrere Bedingungen in der Where-Funktion von NumPy?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 00:59:30262Durchsuche

How to Effectively Combine Multiple Conditions in NumPy's where Function?

Mehrere Bedingungen in der Where-Funktion von NumPy

In NumPy wird die Funktion where() häufig für die bedingte Auswahl verwendet. Beim Umgang mit mehreren Bedingungen ist es wichtig zu verstehen, wie man sie effektiv kombiniert, um die gewünschten Ergebnisse zu erzielen.

Betrachten Sie ein Beispiel, bei dem wir Abstände innerhalb eines bestimmten Bereichs auswählen möchten. Der folgende Code versucht dies zu tun:

<code class="python">dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]

Dies führt jedoch zu unerwarteten Ergebnissen, da nur Abstände innerhalb der zweiten Bedingung (np.where(dists <= r dr)) ausgewählt werden.

Den Code korrigieren

Um das Problem zu beheben, müssen wir verstehen, dass np.where() Indizes von Elementen zurückgibt, die die Bedingung erfüllen, und kein boolesches Array. Daher führt die Kombination der Ergebnisse mehrerer np.where()-Aufrufe nicht zu einem booleschen Array.

Wir können stattdessen elementweise boolesche Operatoren verwenden, um die gewünschte bedingte Auswahl durchzuführen. Hier sind zwei korrekte Möglichkeiten, es zu implementieren:

Option 1: Bedingungen kombinieren

<code class="python">dists[(dists >= r) & (dists <= r + dr)]

Der &-Operator führt elementweises UND aus, was zu einem booleschen Array führt. Wir können dies dann verwenden, um die ursprünglichen Array-Distanzen zu indizieren.

Option 2: Zwischenvariable verwenden

<code class="python">mask1 = dists >= r
mask2 = dists <= r + dr
dists[(mask1) & (mask2)]

Indem wir für jede Bedingung temporäre Variablen erstellen, können wir dies überprüfen beide Bedingungen und kombinieren Sie sie mit dem &-Operator, um ein boolesches Array zu erstellen.

Warum der Originalcode nicht funktionierte

Der Originalcode funktionierte nicht, weil np .where() gibt eine Liste von Indizes zurück, kein boolesches Array. Die Kombination zweier Indexlisten führt nicht zum gewünschten Ergebnis.

Zum Beispiel:

<code class="python">dists = np.arange(0, 10, 0.5)
r = 5
dr = 1

mask1 = np.where(dists >= r)
mask2 = np.where(dists <= r + dr)

print(mask1 and mask2)
# Outputs: (array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12]),)</code>

Wie Sie sehen können, ist das resultierende Array kein boolesches Array, das angibt, welche Elemente beide Bedingungen erfüllen.

Das obige ist der detaillierte Inhalt vonWie kombiniere ich effektiv mehrere Bedingungen in der Where-Funktion von NumPy?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn