Heim > Backend-Entwicklung > Python-Tutorial > So filtern Sie Numpy-Arrays mit mehreren Bedingungen: Warum schlägt „np.where()' fehl und wie erzielt man korrekte Ergebnisse?

So filtern Sie Numpy-Arrays mit mehreren Bedingungen: Warum schlägt „np.where()' fehl und wie erzielt man korrekte Ergebnisse?

Barbara Streisand
Freigeben: 2024-10-26 10:27:02
Original
309 Leute haben es durchsucht

 How to Filter Numpy Arrays with Multiple Conditions: Why `np.where()` Fails and How to Achieve Correct Results?

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))]
Nach dem Login kopieren

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:

  • Element- Weiser Vergleich:

Um mehrere Bedingungen anzuwenden, verwenden Sie elementweise Vergleiche direkt:

dists[(dists >= r) & (dists <= r + dr)]
Nach dem Login kopieren
  • Boolesche Arrays:

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]
Nach dem Login kopieren
  • Ausgefallene Indizierung:

Die ausgefallene Indizierung ermöglicht auch eine bedingte Filterung:

result = dists[(condition1) & (condition2)]
Nach dem Login kopieren

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 dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage