下面的代码用于计算两个向量的内积,但有时它会返回错误的值,我不知道为什么。谁能帮我解决这个问题吗?
特别针对这些输入:[-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 的精确幂构建的数字都无法精确表示为 float ,需要进行近似。欲了解更深入的信息,您可以阅读:What Every Computer Scientist Should Know About Floating-Point Arithmetic .
关于python - 为什么内积计算得到的结果不精确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45631674/