gpt4 book ai didi

python - Numpy 浮点舍入错误

转载 作者:太空狗 更新时间:2023-10-29 17:51:01 26 4
gpt4 key购买 nike

在搜索一些 numpy 的东西时,我遇到了一个讨论 numpy.dot() 舍入精度的问题:

Numpy: Difference between dot(a,b) and (a*b).sum()

因为我的 table 上正好有两台(不同的)带有 Haswell-CPU 的计算机,它们应该提供 FMA 和所有东西,我想我会测试 Ophion 在第一个答案中给出的例子,我得到的结果是让我有些吃惊:

更新/安装/修复 lapack/blas/atlas/numpy 后,我在两台机器上都得到了以下信息:

>>> a = np.ones(1000, dtype=np.float128)+1e-14
>>> (a*a).sum()
1000.0000000000199999
>>> np.dot(a,a)
1000.0000000000199948

>>> a = np.ones(1000, dtype=np.float64)+1e-14
>>> (a*a).sum()
1000.0000000000198
>>> np.dot(a,a)
1000.0000000000176

所以标准乘法+sum()比np.dot()更精确。然而,timeit 证实 .dot() 版本对于 float64 和 float128 都更快(但不多)。

谁能解释一下?

编辑:我不小心删除了有关 numpy 版本的信息:1.9.0 和 1.9.3 与 python 3.4.0 和 3.4.1 的结果相同。

最佳答案

看起来他们最近添加了一个特殊的 Pairwise Summationndarray.sum 以提高数值稳定性。

来自 PR 3685 ,这会影响:

all add.reduce calls that go over float_add with IS_BINARY_REDUCE true
so this also improves mean/std/var and anything else that uses sum.

参见 here用于代码更改。

关于python - Numpy 浮点舍入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32952941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com