在python中计算正常样本在某个时间间隔内落下的概率日志时防止下溢
给定两个real在python中计算正常样本在某个时间间隔内落下的概率日志时防止下溢,python,numpy,normal-distribution,numerical-computing,Python,Numpy,Normal Distribution,Numerical Computing,给定两个realx和y,我想用python计算以下函数: log Pr [ x <= t <= y ], 不幸的是,当x和y远离0时,这会导致下溢。 如何防止这种数值错误?如果在日志空间中进行,这个问题会更加稳定 诀窍是对小于零的值使用scipy.stats.norm.logcdf,对大于零的值使用scipy.stats.norm.logsf 这与计算log(exp(y)-exp(x))的稳定算法相结合,给出了合理的结果 import numpy as np from scipy.
x
和y
,我想用python计算以下函数:
log Pr [ x <= t <= y ],
不幸的是,当x
和y
远离0
时,这会导致下溢。
如何防止这种数值错误?如果在日志空间中进行,这个问题会更加稳定 诀窍是对小于零的值使用
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))
将numpy导入为np
从scipy.stats导入norm
def log_减法(x,y):
返回x+np.log1p(-np.exp(y-x))
def lnprob(x,y):
如果x<0:
返回log_减法(norm.logcdf(y),norm.logcdf(x))
其他:
返回log_减法(norm.logsf(x),norm.logsf(y))
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))