我是 numpy 广播的新手。我定义了三个 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) 的总和,因此它应该是可广播的(在昏暗 1 中为 2vs1,在昏暗 2 中为 1vs1,在昏暗 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
解释当然很明显......但请帮助我!