Skip to main content
 首页 » 编程设计

python之以数值稳定的方式评估 log(1之normal_cdf(x))

2025年05月04日13del

如何以数值稳定的方式评估 log(1 - normal_cdf(x))?这里,normal_cdf 是标准正态分布的累积分布函数。

例如,在 Python 中:

import scipy  
from scipy.stats import norm 
 
np.log(1 - norm.cdf(10)) 

给出 -inf 和 RuntimeWarning: divide by zero encountered in log 因为 norm.cdf(10) 几乎等于 1。有没有像logsumexp这样的函数可以避免数值下溢?

请您参考如下方法:

由于正态分布关于 0 对称,我们有

1 - F(x) = P(X > x) 
         = P(X < -x) 
         = F(-x) 

因此

np.log(1 - norm.cdf(10)) = np.log(norm.cdf(-10)) 
                         = norm.logcdf(-10)