草庐IT

python numpy ValueError : operands could not be broadcast together with shapes

coder 2023-05-20 原文

在 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

(请注意,如果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)

关于python numpy ValueError : operands could not be broadcast together with shapes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24560298/

有关python numpy ValueError : operands could not be broadcast together with shapes的更多相关文章

随机推荐