NumPy-Broadcasting

Broadcasting ist NumPys Art, numerische Berechnungen auf Arrays mit unterschiedlichen Formen durchzuführen. Arithmetische Operationen auf Arrays werden üblicherweise an entsprechenden Elementen durchgeführt.

Wenn zwei Arrays a und b die gleiche Form haben, d. h., sie erfüllena.shape == b.shape, dann ist das Ergebnis von a*b die Multiplikation der entsprechenden Elemente von a und b. Dies erfordert die gleiche Anzahl von Dimensionen und die gleiche Länge in jeder Dimension.

Beispiel

import numpy as np a = np.array([1,2,3,4]) b = np.array([10,20,30,40]) c = a * b print (c)

Das Ausgabeergebnis ist:

[ 10  40  90 160]

Wenn die Shapes der 2 Arrays in einer Operation unterschiedlich sind, löst numpy automatisch den Broadcasting-Mechanismus aus. Zum Beispiel:

Beispiel

import numpy as np a = np.array([[ 0, 0, 0], [10,10,10], [20,20,20], [30,30,30]]) b = np.array([0,1,2]) print(a + b)

Das Ausgabeergebnis ist:

[[ 0  1  2]
 [10 11 12]
 [20 21 22]
 [30 31 32]]
Das folgende Bild zeigt, wie Array b durch Broadcasting mit Array a kompatibel gemacht wird.

Das Addieren eines zweidimensionalen 4x3-Arrays zu einem eindimensionalen Array der Länge 3 ist äquivalent dazu, Array b 4-mal in der zweiten Dimension zu wiederholen und dann die Operation auszuführen:

Beispiel

import numpy as np a = np.array([[ 0, 0, 0], [10,10,10], [20,20,20], [30,30,30]]) b = np.array([1,2,3]) bb = np.tile(b, (4, 1)) # Jede Dimension von b wiederholen print(a + bb)

Das Ausgabeergebnis ist:

[[ 1  2  3]
 [11 12 13]
 [21 22 23]
 [31 32 33]]

Broadcasting-Regeln:

  • Alle Eingabe-Arrays werden an dem Array ausgerichtet, das unter ihnen die meisten Dimensionen hat; die fehlenden Teile der Shape werden durch vorangestellte 1en aufgefüllt.
  • Die Shape des Ausgabearrays ist das Maximum der Shapes der Eingabearrays entlang jeder Dimension.
  • Wenn die Länge einer Dimension eines Eingabearrays mit der entsprechenden Dimension des Ausgabearrays übereinstimmt oder ihre Länge 1 ist, kann das Array für die Berechnung verwendet werden; andernfalls tritt ein Fehler auf.
  • Wenn die Länge einer Dimension eines Eingabearrays 1 ist, wird der erste Satz von Werten in dieser Dimension für Operationen entlang dieser Dimension verwendet.

Einfaches Verständnis:Für zwei Arrays vergleicht man jede ihrer Dimensionen (ignorieren, wenn ein Array die aktuelle Dimension nicht hat), und die folgenden Bedingungen müssen erfüllt sein:

  • Die Arrays haben dieselbe Form.
  • Der Wert der aktuellen Dimension ist gleich.
  • Einer der Werte der aktuellen Dimension ist 1.

Wenn die Bedingungen nicht erfüllt sind, löst"ValueError: frames are not aligned"eine Ausnahme aus.

Weitere Erweiterungen