API · NumPy
Python Numpy.where() Funktion
Die Funktion numpy where() prüft Elemente in einem Eingabe-Array und erzeugt eine Ausgabe gemäß der angegebenen Bedingung.
Auf dieser Seite
numpy.where() hat zwei Formen mit unterschiedlichen Ergebnissen. Der Aufruf numpy.where(condition) gibt Index-Arrays für die Positionen zurück, an denen die Bedingung wahr ist. Bei numpy.where(condition, x, y) wird Element für Element ein Wert aus x oder y ausgewählt. Verwende die erste Form, um Trefferpositionen zu finden, und die zweite, um anhand einer Bedingung ein Array zu erstellen.
Antwort: numpy.where() gibt Indizes zurück oder wählt Werte aus
Verwende die Form nur mit der Bedingung, wenn du Positionen benötigst, etwa Indizes, die du untersuchen oder in einer weiteren Operation verwenden willst. Die Form mit drei Argumenten eignet sich, wenn die Werte des Ergebnisses von einer Prüfung abhängen sollen. Die Bedingung bestimmt, welcher Zweig das jeweilige Ergebniselement liefert: Ist sie wahr, wird aus x ausgewählt; ist sie falsch, aus y.
Syntax und Parameter von numpy.where()
Die Aufrufsignaturen lauten numpy.where(condition) und numpy.where(condition, x, y). Das Argument condition ist ein arrayähnlicher Wert; seine Wahrheitswerte bestimmen das Ergebnis. Bei der Form mit drei Argumenten liefert x die Werte für Positionen, an denen die Bedingung wahr ist, und y die Werte für Positionen, an denen sie falsch ist. Übergib x und y immer gemeinsam; sie können nicht einzeln angegeben werden. Lasse beide weg, wenn du Indizes benötigst.
Weitere Einzelheiten findest du in der NumPy-1.18-Dokumentation zu numpy.where(). Dieser Artikel konzentriert sich auf die beiden Aufrufformen und die folgenden Beispiele. Er behandelt nicht alle möglichen Kombinationen von Array-Formen.
Passende Indizes mit numpy.where(condition) ermitteln
Bei einer eindimensionalen Bedingung besteht das Ergebnis aus einem Tupel mit einem Element: einem Integer-Array. Die darin enthaltenen Ganzzahlen bezeichnen Positionen in der Eingabe, nicht die Werte an diesen Positionen. Du kannst das Tupel direkt zum Indizieren des ursprünglichen Arrays verwenden. Wenn du ausdrücklich das Index-Array benötigst, greife auf das erste Tupel-Element zu.
Führe dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import numpy as np
values = np.array([4, 9, 12, 7, 15])
matching_positions = np.where(values > 10)
print(matching_positions)
An den Positionen 2 und 4 ist diese Bedingung wahr, wobei Python bei null zu zählen beginnt. Das zurückgegebene Index-Array zeigt daher, an welchen Stellen die Werte übereinstimmen; die Werte 12 und 15 selbst enthält es nicht.
Werte mit numpy.where(condition, x, y) auswählen
Die Form mit drei Argumenten gibt ausgewählte Werte statt Positionen zurück. An jeder Position wird bei einer wahren Bedingung der entsprechende Wert aus x übernommen, bei einer falschen Bedingung der Wert aus y. So lassen sich beispielsweise Werte ersetzen, die einen Schwellenwert verfehlen, während die Werte erhalten bleiben, die ihn erreichen.
Führe dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import numpy as np
scores = np.array([42, 81, 67, 95])
labels = np.where(scores >= 70, "pass", "review")
print(labels)
Hier wird jeder Wert mit 70 verglichen. Für Werte ab diesem Schwellenwert enthält das Ergebnis "pass", für die übrigen "review". Wie bei dieser Aufrufform erforderlich, werden beide Alternativen angegeben.
numpy.where() mit mehrdimensionalen Arrays verwenden
Bei einer zweidimensionalen Bedingung gilt dieselbe Auswahlregel für jede Position. Jeder Ausgabewert wird an der entsprechenden Position aus x oder y ausgewählt. Damit eignet sich die Form mit drei Argumenten zum Umformen einer Matrix, wobei ihre Anordnung aus Zeilen und Spalten erhalten bleibt.
Führe dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import numpy as np
values = np.array([[10, 25, 30], [18, 50, 5]])
replacement = np.full(values.shape, -1)
selected = np.where(values > 20, values, replacement)
print(selected)
Die Bedingung prüft jedes Element. Werte über 20 bleiben im Ergebnis; an den übrigen Positionen wird der entsprechende Wert -1 aus replacement eingesetzt. Die zweidimensionale Anordnung der Eingabe bleibt im Ergebnis erhalten.
Bedingungen mit numpy.where() kombinieren
Um elementweise Vergleiche zu kombinieren, setze jeden Vergleich in Klammern und verbinde sie mit &, wenn beide Bedingungen wahr sein müssen, oder mit |, wenn mindestens eine Bedingung wahr sein muss. Diese Operatoren eignen sich für Array-Bedingungen. Pythons skalare Operatoren and und or ersetzen nicht die Kombination elementweiser Array-Vergleiche.
Führe dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import numpy as np
values = np.array([1, 2, 3, 4, 5])
in_range = (values > 1) & (values < 5)
selected = np.where(in_range, values, 0)
print(selected)
Die kombinierte Bedingung ist für 2, 3 und 4 wahr, daher bleiben diese Werte erhalten; an Positionen außerhalb dieses Bereichs wird 0 eingesetzt. Für eine Entweder-oder-Prüfung verbindest du die eingeklammerten Vergleiche mit |, zum Beispiel (values < 2) | (values > 4). Jeder Vergleich erzeugt ein Array mit Wahrheitswerten; anschließend wendet numpy.where() an jeder Position den ausgewählten Zweig an.