Rundfunk Regeln hinaus gelten auch,
In [7]: np.array([])+np.array([1.])
Out[7]: array([], dtype=float64)
In [8]: np.array([])+np.array([1.,2.])
....
ValueError: operands could not be broadcast together with shapes (0,) (2,)
einen Blick auf die Formen aussehen lassen.
In [9]: np.array([]).shape,np.array([1.]).shape,np.array([1,2]).shape
Out[9]: ((0,), (1,), (2,))
(0,) und (1,) - die (1,)
können die Form der anderen Anordnung entsprechen eingestellt werden. Eine 1
Dimension kann angepasst werden, um zu dem anderen Array zu passen, von Beispiel erhöht von 1 auf 3. Aber hier wurde es (scheinbar) von 1 auf 0 angepasst. Normalerweise arbeite ich nicht mit Arrays mit einer 0-Dimension, aber das sieht so aus eine richtige Verallgemeinerung höherer Dimensionen.
Versuchen Sie (0,) und (1,1). Das Ergebnis ist ein (1,0):
In [10]: np.array([])+np.array([[1.]])
Out[10]: array([], shape=(1, 0), dtype=float64)
(0,), (1,1) => (1,0), (1,1) => (1,0)
Wie für den 2. Fall mit Formen (0,) und (2,); Es ist keine Dimension der Größe 1 einzustellen, daher der Fehler.
Shapes (0,) und (2,1) Sie übertragen (zu (2,0)):
In [12]: np.array([])+np.array([[1.,2]]).T
Out[12]: array([], shape=(2, 0), dtype=float64)
'Zwei Dimensionen kompatibel sind, wenn sie gleich sind, oder einer von ihnen ist 1 '- Nun, das ist sicherlich richtig, also sollten die beiden per Definition kompatibel sein. Allerdings sehe ich nicht, wie dies intuitiv sinnvoll für eine Dimension 0 vs 1 ist. – cel
@cel: siehe Antwort unten – Julien
@cel betrachten 'np.allclose ([], 1)'. Ihre Dimension ist '(0,)' und '()', also weder gleich noch 1.Ist das die einzige Kompatibilitätsregel? –