Python:pandas.DataFrame.comprod() 和 numpy.comprod() 是否处理数值下溢?

Python: Do pandas.DataFrame.comprod() and numpy.comprod() handle numerical underflow?

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

谢谢。

很遗憾,没有。 @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 float支持最小正值2**-1022,约2.225e-308。一旦您的计算变得小于该值,它就会降为零,这就是我们在上面的输出中看到的。 pandas.

也是如此