ValueError: 操作数形状无法广播 (224,224) (180,180)

2 投票
2 回答
24471 浏览
提问于 2025-04-18 07:48

我正在写一个程序,用来计算两个向量之间的余弦相似度。对于小的文本文件,这个程序运行得很好,但对于大的数据集,它就出错了。我看了很多关于广播的例子,但还是没能找到真正的问题所在。(在 p=x*y 这一行出错)

x = numpy.dot(u, u.T)
y = numpy.dot(v, v.T)
p = x * y
value = numpy.dot(u, v.T) / p

p=(x*y)
ValueError: operands could not be broadcast together with shapes (224,224) (180,180)

2 个回答

2

如果 xy 的形状不一样,就会出现这种错误。它们的形状必须完全相同。请查看 这个 numpy 的广播规则。

2

你的变量 x 和变量 y 的“维度”不同。你应该确保它们的“维度”相似,比如 224,224 和 224,224,或者 180,180 和 180,180。

也就是说,用 numpy 进行“乘法”时,不能对两个“numpy 数组”进行维度不同的相乘。

举个例子:

x = np.linspace(1,10,num=224)
y = np.linspace(1,10,num=180)
p = x*y

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    p = x*y
ValueError: operands could not be broadcast together with shapes (224,) (180,) 

但是:

 x = np.linspace(1,10,num=224)
 y = np.linspace(1,10,num=224)
 p = x*y

这样就可以工作了。

撰写回答