下面的代码用于计算两个向量的内积,但是有时它返回错误的值,我不知道为什么。谁能帮我解决这个问题?
专门针对以下输入:[-2.328,-7.284,-1.214]和[-1.821、1.072,-2.94]
reduce(lambda x,y : x+y, [x*y for x,y in zip(self.coordinates, v.coordinates)])
我的猜测是这是一个舍入错误。在示例中使用向量:
a = [-2.328, -7.284, -1.214]
b = [-1.821, 1.072, -2.94]
c = reduce(lambda x,y : x+y, [x*y for x,y in zip(a, b)])
print(c)
会给,-1.3322676295501878e-15
而真正的结果应该是0
。为了进行比较,numpy函数np.inner(a,b)
将给出非常相似的结果。-1.33226762955e-15
。
该错误是由于无法将任何不能由2的幂构成的数字都精确地表示为浮点数,因此需要将其近似。有关更深入的信息,请阅读:每位计算机科学家都应了解的有关浮点算法的知识。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句