gpt4 book ai didi

python - 在计算正常样本落在 python 中某个区间内的概率的对数时防止下溢

转载 作者:行者123 更新时间:2023-11-28 17:27:48 25 4
gpt4 key购买 nike

给定两个实数 xy,我想在 python 中计算以下函数:

log Pr [ x <= t <= y ],

其中 t 从正态分布中采样。

一个天真的实现是使用 scipy.stats.norm .

np.log(scipy.stats.norm.cdf(y) - scipy.stats.norm.cdf(x))

不幸的是,当 xy 远离 0 时,这会导致下溢。如何防止这样的数字错误?

最佳答案

如果在 logspace 中完成,这个问题会稳定得多。

技巧是对小于零的值使用 scipy.stats.norm.logcdf,对大于零的值使用 scipy.stats.norm.logsf

这与用于计算 log(exp(y) - exp(x)) 的稳定算法相结合给出了合理的结果

import numpy as np
from scipy.stats import norm

def log_subtract(x, y):
return x + np.log1p(-np.exp(y-x))

def lnprob(x, y):
if x < 0:
return log_subtract(norm.logcdf(y), norm.logcdf(x))
else:
return log_subtract(norm.logsf(x), norm.logsf(y))

关于python - 在计算正常样本落在 python 中某个区间内的概率的对数时防止下溢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37269854/

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