gpt4 book ai didi

python - 如何强制 Python (EMCEE) 在先前定义的范围之间精确移动

转载 作者:太空宇宙 更新时间:2023-11-03 20:59:48 25 4
gpt4 key购买 nike

我使用 EMCEE Python 包为 MCMC 编写了以下代码

log_prior函数我定义了 EMCEE 的参数范围在它们之间移动而不是在它们之外。但问题是,在结果中我看到例如 od0其值为 0.64不在 0.68 < od0 < 0.70 中即使对于b我也有这个问题.

我想知道如何强制 EMCEE 恰好位于我定义的范围之间。该模型对值非常敏感,我只想在 0.68 < od0 < 0.70 之间进行探索不能比这个更大或更小。

def log_prior(H0, od0, c, b, M): 
if not 0.68 < od0 < 0.70 and 60 < H0 < 80 and -20 < M < -18.5 and 0.045 < b < 0.065 :
#return 0.0
return -np.inf
mu = 0.878
sigma = 0.0004
return np.log(1.0/(np.sqrt(2*np.pi)*sigma))-0.5*(c-mu)**2/sigma**2

没有Gaussian prior代码是:

 def log_prior(H0, od0, c, b, M): 
if 0.68 < od0 < 0.70 and 60 < H0 < 80 and -20 < M < -18.5 and 0.045 < b < 0.065 :
return 0.0
return -np.inf

最佳答案

在逻辑语句中使用括号。例如,对于 od0 = 0.64H0 = 50,其中先验应为 -inf

not 0.68 < od0 < 0.70 and  60 < H0 < 80  
>> False

因此先验给出负对数概率,但如果添加括号:

not (0.68 < od0 < 0.70 and  60 < H0 < 80) 
>> True

它驱动先于-inf的正确值

关于python - 如何强制 Python (EMCEE) 在先前定义的范围之间精确移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55780582/

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