私はnumpyで放送する初心者です。次のように 3 つの numpy 配列を定義します。
from numpy import *
a=array([10,20]).reshape(2,1)
b=array([100,200,300]).reshape(1,3)
c=arange(1,11).reshape(1,1,10)
a+b は (2,1) 対 (1,3) の合計であるため、ブロードキャスト可能であると想定されます (dim 1 で 2vs1、dim 2 で 1vs3、ブロードキャスト ルールが満たされます)。実際、それは次のとおりです。
>>> a+b
array([[110, 210, 310],
[120, 220, 320]])
a+c は (2,1) 対 (1,1,10) の合計であるため、ブロードキャスト可能であると想定されます (dim 1 で 2vs1、dim 2 で 1vs1、dim 3 で 1vs10、ブロードキャスト ルールが満たされます)。実際、それは次のとおりです。
>>> a+c
array([[[11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30]]])
b+c は (1,3) 対 (1,1,10) の合計であるため、ブロードキャスト可能であると想定されています (dim 1 で 1vs1、dim 2 で 3vs1、dim 3 で 1vs10。しかし、そうではないようです:
>>> b+c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape
説明は確かに明白です...しかし、私を助けてください!