如何修复:valueerror:操作数无法与形状一起广播
使用Python时可能会遇到的错误是:
ValueError : operands could not be broadcast together with shapes (2,2) (2,3)
当您尝试在 Python 中使用乘号 ( * ) 而不是numpy.dot()函数执行矩阵乘法时,会出现此错误。
以下示例展示了如何在每种情况下更正此错误。
如何重现错误
假设我们有一个 2×2 矩阵 C,它有 2 行和 2 列:
假设我们还有一个 2×3 矩阵 D,它有 2 行 3 列:
以下是矩阵 C 与矩阵 D 相乘的方法:
这会产生以下矩阵:
假设我们尝试在 Python 中使用乘号 (*) 执行矩阵乘法,如下所示:
import numpy as np #define matrices C = np. array ([7, 5, 6, 3]). reshape (2, 2) D = np. array ([2, 1, 4, 5, 1, 2]). reshape (2, 3) #print dies print (C) [[7 5] [6 3]] print (D) [[2 1 4] [5 1 2]] #attempt to multiply two matrices together CD ValueError: operands could not be broadcast together with shapes (2,2) (2,3)
我们收到一个ValueError 。我们可以参考NumPy 文档来了解为什么会收到此错误:
当操作两个数组时,NumPy 逐个元素地比较它们的形状。它从最终尺寸(即最右边)开始并向左移动。两个维度兼容时
- 它们是相等的,或者
- 其中之一是 1
如果不满足这些条件,则会抛出ValueError: Operands Could not be Broadcast Together 异常,表明数组的形状不兼容。
由于我们的两个矩阵的最终维度值不同(矩阵 C 的最终维度为 2,矩阵 D 的最终维度为 3),因此我们收到错误。
如何修复错误
修复此错误的最简单方法是简单地使用numpy.dot()函数来执行矩阵乘法:
import numpy as np #define matrices C = np. array ([7, 5, 6, 3]). reshape (2, 2) D = np. array ([2, 1, 4, 5, 1, 2]). reshape (2, 3) #perform matrix multiplication C. dowry (D) array([[39, 12, 38], [27, 9, 30]])
请注意,我们避免了ValueError并成功地将两个矩阵相乘。
另请注意,结果与我们之前手动计算的结果相符。
其他资源
以下教程解释了如何修复 Python 中的其他常见错误:
如何修复:列重叠但未指定后缀
如何修复:对象“numpy.ndarray”没有“append”属性
如何修复:如果使用所有标量值,则需要传递索引
如何修复:ValueError:无法将 float NaN 转换为 int