python numpy ValueError: Operanden konnten nicht zusammen mit Shapes übertragen werden
Der Fehler "ValueError: operands could not be broadcast together with shapes" tritt in NumPy auf, wenn die Formen der zu bearbeitenden Arrays inkompatibel sind. Hier ist ein Beispiel für Code, der diesen Fehler auslöst:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5])
c = a + b
In diesem Beispiel hat a
die Form (3,)
und b
die Form (2,)
. Wenn der +
-Operator auf diese beiden Arrays angewendet wird, versucht NumPy, das kleinere Array (b
) so zu ändern, dass es der Form des größeren Arrays (a
) entspricht, indem seine Elemente wiederholt werden. Die Formen sind jedoch nicht kompatibel, daher wird der Fehler ausgelöst.
Um diesen Fehler zu beheben, müssen Sie sicherstellen, dass die Formen der zu bearbeitenden Arrays kompatibel sind. Eine Möglichkeit besteht darin, die Arrays so umzuformen, dass sie die gleiche Anzahl von Dimensionen haben und die gleiche Größe entlang jeder Dimension aufweisen. Eine andere Möglichkeit ist die Verwendung von numpy-Funktionen wie numpy.newaxis, numpy.expand_dims, numpy.atleast_1d, numpy.atleast_2d usw.
a = np.array([1, 2, 3])
b = np.array([4, 5])
c = a[:, np.newaxis] + b
Das funktioniert, da die Form von b (2,) auf (2,1) gebroadcastet wird und die Form von a (3,1) entspricht.
Sie können auch die Broadcasting-Funktionalität von NumPy verwenden, indem Sie die Arrays in kompatible Formen umformen.
a = np.array([1, 2, 3])
b = np.array([4, 5])
c = a + b[:, None]
Das funktioniert, da die Form von b (2,) auf (1,2) gebroadcastet wird und die Form von a (3,1) entspricht.