python numpy ValueError:操作数无法与形状一起广播

新手上路,请多包涵

在numpy中,我有两个“数组”, X(m,n)y 是一个向量 (n,1)

使用

X*y

我收到错误

ValueError: operands could not be broadcast together with shapes (97,2) (2,1)

(97,2)x(2,1) 显然是一个合法的矩阵运算并且应该给我一个 (97,1) 向量

编辑:

我已经使用 X.dot(y) 纠正了这个问题,但原来的问题仍然存在。

原文由 yayu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
1 个回答

dot 是矩阵乘法,但是 * 做其他事情。

我们有两个数组:

  • X , 形状 (97,2)
  • y , 形状 (2,1)

使用 Numpy 数组,操作

X * y

是按元素完成的,但是可以在一个或多个维度上扩展一个或两个值以使它们兼容。此操作称为广播。尺寸为 1 或缺失的尺寸可用于广播。

在上面的示例中,维度不兼容,因为:

 97   2
 2   1

这里在第一维(97 和 2)中存在相互冲突的数字。这就是上面的 ValueError 所抱怨的。第二个维度就可以了,因为数字 1 与任何东西都不冲突。

有关广播规则的更多信息:http: //docs.scipy.org/doc/numpy/user/basics.broadcasting.html

(请注意,如果 Xy 属于类型 numpy.matrix ,那么星号可以用作矩阵乘法。我的建议是远离 numpy.matrix ,它往往使事情变得复杂而不是简化。)

您的阵列应该可以使用 numpy.dot ;如果您在 numpy.dot 上遇到错误,则您一定有其他错误。如果 numpy.dot 的形状错误,您会得到一个不同的异常:

 ValueError: matrices are not aligned

如果您仍然收到此错误,请发布问题的最小示例。与您的形状类似的数组的示例乘法成功:

 In [1]: import numpy

In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)

原文由 DrV 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题