Broadcasting
Swipe um das Menü anzuzeigen
Bevor mathematische Operationen in NumPy durchgeführt werden, ist es wichtig, ein zentrales Konzept zu verstehen – Broadcasting.
Broadcasting ist eine Methode, um die Formen von Arrays für arithmetische Operationen auszurichten, ohne sie manuell umzuformen. Im Wesentlichen passt Broadcasting die Formen von Arrays automatisch an.
Wenn NumPy mit zwei Arrays arbeitet, prüft es deren Formen auf Kompatibilität, um festzustellen, ob sie gemeinsam gebroadcastet werden können.
Wenn zwei Arrays bereits die gleiche Form haben, ist Broadcasting nicht erforderlich.
Gleiche Anzahl an Dimensionen
Angenommen, es gibt zwei Arrays, für die eine Addition durchgeführt werden soll, mit den folgenden Formen: (2, 3) und (1, 3). NumPy vergleicht die Formen der beiden Arrays beginnend bei der rechten Dimension und bewegt sich nach links. Zuerst werden also 3 und 3 verglichen, dann 2 und 1.
Zwei Dimensionen gelten als kompatibel, wenn sie gleich sind oder wenn eine von ihnen 1 ist:
- Für die Dimensionen 3 und 3 sind sie kompatibel, da sie gleich sind;
- Für die Dimensionen 2 und 1 sind sie kompatibel, da eine von ihnen 1 ist.
Da alle Dimensionen kompatibel sind, gelten die Formen als kompatibel. Daher können die Arrays gebroadcastet werden, was zu einer Standard-Addition zwischen Matrizen gleicher Form führt, die elementweise durchgeführt wird.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 2D array with 1 row array_2 = np.array([[11, 12, 13]]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
array_2 wird als 2D-Array mit nur einer Zeile erstellt, weshalb seine Form (1, 3) ist.
Aber was würde passieren, wenn du es als 1D-Array mit der Form (3,) erstellst?
Unterschiedliche Anzahl von Dimensionen
Wenn ein Array weniger Dimensionen als das andere hat, werden die fehlenden Dimensionen als Größe 1 behandelt. Betrachten Sie zwei Arrays mit den Formen (2, 3) und (3,). Hier gilt 3 = 3, und die fehlende linke Dimension wird als 1 betrachtet, sodass die Form (3,) zu (1, 3) wird. Da die Formen (2, 3) und (1, 3) kompatibel sind, können diese beiden Arrays miteinander gebroadcastet werden.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 1D array array_2 = np.array([11, 12, 13]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
Broadcasting von Skalaren
Zusätzlich zu mathematischen Operationen mit Arrays können dank Broadcasting ähnliche Operationen auch zwischen einem Array und einem Skalar (Zahl) durchgeführt werden. In diesem Fall kann das Array jede beliebige Form haben, da ein Skalar im Wesentlichen keine Form besitzt und alle seine Dimensionen als 1 betrachtet werden. Daher sind die Formen immer kompatibel.
123456import numpy as np array = np.array([[1, 2, 3], [4, 5, 6]]) print(array.shape) # Broadcasting and element-wise addition result = array + 10 print(result)
Inkompatible Formen
Beispiel für inkompatible Formen, bei denen eine arithmetische Operation nicht durchgeführt werden kann, da Broadcasting nicht möglich ist:
Es liegt ein 2x3-Array und ein 1D-Array der Länge 2 vor, also eine Form von (2,). Die fehlende Dimension wird als 1 betrachtet, sodass die Formen zu (2, 3) und (1, 2) werden.
Ausgehend von der rechten Dimension: 3=2, daher liegen inkompatible Dimensionen und somit inkompatible Formen vor. Beim Ausführen des Codes tritt ein Fehler auf:
12345678import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) array_2 = np.array([11, 12]) print(array_2.shape) # ValueError result = array_1 + array_2 print(result)
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen