python - numpy.exponential 行为略有不同

标签 python numpy exponential

我在两台不同的机器上安装了 Python3.6,发行版 Anaconda。我不能发誓我使用了相同的安装程序文件,尽管我认为我使用过。当我尝试检查 Python、Anaconda 和 numpy 版本时,我看到了同样的情况: In the server machine In the local machine

我得到的数值差异很小。经过一些调试后,我成功地将问题减少到对 numpy.exp 的调用。只需运行代码

import numpy as np

x = -0.1559828702879514361612223
y = np.exp(x)
print("The exponential of %0.25f is %0.25f" % (x, y))

我明白了

The exponential of -0.1559828702879514361612223 is 0.8555738459791129013609634

在第一台(“服务器”)机器上和

The exponential of -0.1559828702879514361612223 is 0.8555738459791127903386609

在第二台(“本地”)机器上。

我知道 float 没有 25 位小数精度,但这些差异在我的代码中传播并发生在小数点后第 12 位附近。

不同行为的原因可能是什么?

最佳答案

这与 NumPy 无关,而是与系统相关的浮点运算结果有关。在没有 NumPy 的情况下,您可以通过使用 math.exp 来获得相同的结果。一个更简单的例子是

math.exp(2**(-53)) - 1

它在我的一台计算机上恰好返回 0 而在另一台计算机上恰好返回 2.22e-16。正如 math.expm1(2**(-53)) = 1.11e-16 的计算所示,这两个都是同样错误的(顺便说一句,这就是为什么函数 expm1 存在)。

在某种程度上,CPU 依赖性对您有好处,清楚地表明两个系统之间存在差异的那些数字毫无值(value)。要关注的是安排计算以减少 loss of significance .

关于python - numpy.exponential 行为略有不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44409782/

相关文章:

python - pandas 实现不支持 out 参数

c++ - 递归在指数平方中的工作?

python-3.x - Python : Running nested loop, 2D 移动窗口,并行

python - 如何计算numpy数组中图像的平均颜色?

c - Linux内核源码中的指数近似法计算

javascript - 我如何在 Javascript 中定义一个 float ?

python - 如何生成点分隔字符串的子字符串?

python - 如何将发票来源字段添加到 qweb 报告?

python - 在 Python 中使用牛顿法时出现溢出错误

python - 为什么我的神经网络成本不断增加?