python - 为什么内积计算得到的结果不精确?

标签 python python-3.x

下面的代码用于计算两个向量的内积,但有时它会返回错误的值,我不知道为什么。谁能帮我解决这个问题吗?

特别针对这些输入:[-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/

相关文章:

python - groupby 列同时显示其他列

python - 有没有办法在 O(n) 时间内打印字符串的所有子字符串?

python - 按值对字典进行排序,其中值是字典

python - 为什么实例化类时对象的属性不存在?

python - 在 Django 1.10 中使用 Postgres 搜索时出现 NotImplementedError

python - Flask-SQLAlchemy 检查行是否存在

python - python 2/3 升级后运行 django 测试时出错,unittest.loader._FailedTest

python - Keras model.fit() 发出 TypeError : 'NoneType' object is not callable

python - 不能让基于请求构建的脚本从网页生成所有图像链接

python - 在 Boost Python 中使用带有 std::wstring 的 C++ 函数的 Unicode