在 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) 更正此问题,但原始问题仍然存在。
最佳答案
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
(请注意,如果X和y的类型是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)
关于python numpy ValueError : operands could not be broadcast together with shapes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24560298/