Heim  >  Artikel  >  Backend-Entwicklung  >  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
Barbara StreisandOriginal
2024-10-26 10:27:02293Durchsuche

 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))]

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)]
  • 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]
  • Ausgefallene Indizierung:

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!

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