如何修复: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

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注