这个
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)
这可能是什么原因?
这个
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)
这可能是什么原因?
编辑:
当且仅当矩阵 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 异常,表示数组的形状不兼容。结果数组的大小是输入数组每个维度的最大大小。