首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制Python (EMCEE)在之前定义的范围内精确移动

如何强制Python (EMCEE)在之前定义的范围内精确移动
EN

Stack Overflow用户
提问于 2019-04-21 14:52:29
回答 2查看 260关注 0票数 1

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

log_prior函数中,我定义了要在它们之间移动的参数范围,而不是它们之外的参数。但问题是,在结果中,例如od0的值,像0.64,不在0.68 < od0 < 0.70中,我甚至在b中也有这个问题。

我想知道如何强制主持人恰好在我定义的范围内。这个模型对值非常敏感,我只想探索不大于或小于这个值的0.68 < od0 < 0.70

代码语言:javascript
复制
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,代码是:

代码语言:javascript
复制
 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
EN

回答 2

Stack Overflow用户

发布于 2019-12-09 23:29:04

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

代码语言:javascript
复制
not 0.68 < od0 < 0.70 and  60 < H0 < 80  
>> False

因此,先验概率为负的对数概率,但如果您添加括号:

代码语言:javascript
复制
not (0.68 < od0 < 0.70 and  60 < H0 < 80) 
>> True

哪一项驱动-inf的正确值之前

票数 0
EN

Stack Overflow用户

发布于 2020-03-28 22:53:16

要获得每个参数在其先验范围内的最佳拟合值,只需将先验范围放入bracks ()中,即

代码语言:javascript
复制
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

希望这对你有用。请让我进一步了解。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55780582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档