Python-Methode np.where im Detail
Mit der np.where()-Funktion arbeitest du gezielt mit NumPy-Arrays in Python. Dank ihrer vektorisierten Operationen ist sie deutlich effizienter als klassische Methoden mit Schleifen.
Was macht np.where in Python?
Die np.where()-Funktion in Python ist ein starkes Werkzeug aus der NumPy-Bibliothek, um Elemente aus einem Array bedingt auszuwählen. Sie findet Elemente, die eine bestimmte Bedingung erfüllen, und liefert dir entweder die Indizes oder direkt die passenden Werte zurück.
Die np.where()-Funktion ist vielseitig einsetzbar – egal ob in der Datenverarbeitung, bei wissenschaftlichen Berechnungen, im Machine Learning oder der Datenanalyse. Bei der Datenmanipulation hilft dir np.where() dabei, Daten nach Kriterien zu filtern und Werte in Arrays effizient zu ersetzen.
So sieht die Syntax von Python np.where() aus
Die np.where()-Funktion nutzt ein NumPy-artiges Array, das zum Beispiel aus Ganzzahlen oder booleschen Werten besteht. Die konkrete Syntax der np.where()-Funktion in Python ist wie folgt aufgebaut:
import numpy as np
np.where(condition[, x, y])pythoncondition: Dies ist die Bedingung für das Array, nach der die Elemente ausgewählt werden.xundy(optional): Gibst du nurconditionan, liefertnp.where()die Indizes der passenden Elemente. Sindxundydefiniert, werden bei erfüllter Bedingung Werte ausxzurückgegeben, ansonsten die ausy.
Nach dem Aufruf liefert die np.where()-Funktion ein neues NumPy-Array als Ergebnis. Dieses entsteht durch das Filtern oder Auswählen basierend auf deiner Bedingung. Dabei entspricht jeder Wert True oder False im Bedingungsarray der Auswahl des entsprechenden Elements im Original-Array.
Anwendungsbeispiele für np.where()
Da die Methode np.where() bedingte Operationen direkt auf Arrays ausführt, ist sie ein extrem flexibles Tool für deine Datenmanipulation.
Elemente in einem NumPy-Array austauschen
Mit np.where() in NumPy ersetzt du Elemente in einem Array ganz einfach nach einer Bedingung. Dabei kannst du Python-Lists mit np.array() in ein Array umwandeln:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])pythonDefinieren wir nun eine Bedingung für Elemente, die größer als 3 sind. Wir erstellen eine Maske, die True ist, wenn der Wert über 3 liegt, und ansonsten False:
condition = arr > 3pythonJetzt nutzen wir np.where() mit dieser Bedingung. Wir legen fest, dass passende Werte durch -1 und alle anderen durch 0 ersetzt werden:
new_arr = np.where(condition, -1, 0)pythonDas Ergebnis new_arr zeigt das angepasste Array. Die Ausgabe bestätigt: Alle Werte über 3 wurden zu -1, die restlichen zu 0:
print(new_arr)
# Output: [0 0 0 -1 -1]pythonnp.where() mit nur einer Bedingung nutzen
Verwendest du numpy.where() nur mit einer Bedingung (ohne Ersatzwerte), erhältst du ein Tupel von Indizes, an denen die Bedingung True ergibt.
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
condition = arr > 2
result = np.where(condition)
print(result)
# Output: (array([2, 3, 4]),)pythonIn diesem Fall ist arr ein NumPy-Array mit den Werten 1 bis 5. condition = arr > 2 erstellt eine boolesche Maske für alle Elemente in arr, die größer als 2 sind. Da np.where(condition) ohne Ersatzwerte aufgerufen wird, liefert es die Indizes zurück, für welche die Bedingung arr > 2 zutrifft. Du erhältst also ein Array mit den Positionen, an denen die Werte in arr größer als 2 sind.
Broadcasting mit np.where()
Broadcasting erlaubt in NumPy Operationen zwischen Arrays mit verschiedenen Formen, sofern sie kompatibel sind. NumPy versucht dann, die Arrays so zu “dehnen”, dass sie zusammenpassen.
Nehmen wir ein NumPy-Array arr mit der Form (3, 3):
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])pythonUnd ein weiteres Array row mit der Form (3,):
row = np.array([10, 11, 12])pythonDie Formen von arr (3, 3) und row (3,) sind unterschiedlich, aber dank Broadcasting können wir sie trotzdem kombinieren.
Wir addieren nun die Werte jeder Zeile von arr mit den Werten aus row:
result = arr + row
print(result)
# Output: [[11 13 15]
[14 16 18]
[17 19 21]]pythonDabei wurde die eindimensionale row virtuell zu einer (3, 3)-Matrix erweitert, um zur Form von arr zu passen. Danach wurden die Elemente von arr und row schrittweise addiert.