【问题标题】:Python: Do pandas.DataFrame.comprod() and numpy.comprod() handle numerical underflow?Python:pandas.DataFrame.comprod() 和 numpy.comprod() 是否处理数值下溢?
【发布时间】:2017-04-19 22:05:19
【问题描述】:

具体来说,pandasnumpy 中的这些累积乘积函数是否以稳健的方式实现,以在将大量小数相乘时处理下溢?例如,他们是否使用 log-sum-exp 技巧?

谢谢。

【问题讨论】:

  • 你可以很容易地检查这个。例如,设置x = np.array([1e-5, 1e-30, 1e-100, 1e-200, 1e50, 1e150]),并将np.cumprod(x)np.exp(np.cumsum(np.log(x))) 进行比较。
  • 是的,我做了类似的事情,但不确定理论界限在哪里,或者它是否只是达到了我的平台(机器/操作系统/等)的限制。

标签: python pandas numpy floating-point underflow


【解决方案1】:

很遗憾,没有。 @warren-weckesser 的评论表明这不起作用。

np.array([1e-5, 1e-30, 1e-100, 1e-200, 1e50, 1e150]).cumprod()

# returns
array([1.0e-005, 1.0e-035, 1.0e-135, 0.0e+000, 0.0e+000, 0.0e+000])

原因是 numpy 浮点数支持最小的正值 2**-1022,或大约 2.225e-308。一旦你的计算变得小于这个值,它就会下降到零,这就是我们在上面的输出中看到的。熊猫也是如此。

【讨论】:

    猜你喜欢
    • 2014-10-28
    • 2016-01-05
    • 2011-08-12
    • 2022-10-04
    • 2019-05-17
    • 1970-01-01
    • 2013-07-10
    相关资源
    最近更新 更多