0

这个

a=np.zeros((20,4900))

b=np.zeros((1,4900))

a+=b

工作得很好。然而,这:

a=np.zeros((200,49000))

b=np.zeros((10,49000))

a+=b

显示此错误:

ValueError: operands could not be broadcast together with shapes (200,49000) (10,49000) (200,49000)

这可能是什么原因?

4

1 回答 1

3

编辑:

当且仅当矩阵 A 或 B 的高度为 1 行时,Numpy 仅允许您添加两个不等维度的矩阵。这称为广播。基本线性代数表示您正在尝试进行无效的矩阵运算,因为两个矩阵必须具有相同的维度(用于加法/减法),因此 Numpy 尝试通过广播来弥补这一点。

如果在您的第​​二个示例中,如果您的 b 矩阵是这样定义的:

b=np.zeros((1,49000))

不会有错误。但是,如果您尝试这样做:

b=np.zeros((2,49000))

它会抛出同样的错误。Numpy 文档中的案例 2适用于您的情况:

一般广播规则

当对两个数组进行操作时,NumPy 会逐元素比较它们的形状。它从尾随维度开始,然后向前推进。两个维度兼容时

1.they are equal, or
2.one of them is 1

如果不满足这些条件,则会抛出 ValueError: frames are not aligned 异常,表示数组的形状不兼容。结果数组的大小是输入数组每个维度的最大大小。

于 2016-07-02T18:07:56.230 回答