在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 许可协议
dot
是矩阵乘法,但是*
做其他事情。我们有两个数组:
X
, 形状 (97,2)y
, 形状 (2,1)使用 Numpy 数组,操作
是按元素完成的,但是可以在一个或多个维度上扩展一个或两个值以使它们兼容。此操作称为广播。尺寸为 1 或缺失的尺寸可用于广播。
在上面的示例中,维度不兼容,因为:
这里在第一维(97 和 2)中存在相互冲突的数字。这就是上面的 ValueError 所抱怨的。第二个维度就可以了,因为数字 1 与任何东西都不冲突。
有关广播规则的更多信息:http: //docs.scipy.org/doc/numpy/user/basics.broadcasting.html
(请注意,如果
X
和y
属于类型numpy.matrix
,那么星号可以用作矩阵乘法。我的建议是远离numpy.matrix
,它往往使事情变得复杂而不是简化。)您的阵列应该可以使用
numpy.dot
;如果您在numpy.dot
上遇到错误,则您一定有其他错误。如果numpy.dot
的形状错误,您会得到一个不同的异常:如果您仍然收到此错误,请发布问题的最小示例。与您的形状类似的数组的示例乘法成功: