首页 > 解决方案 > pymc3 重载阶跃函数

问题描述

在 pymc3 中,如何将 Heaviside 阶跃函数用作确定性变换?

任何阶跃函数都可以工作,但我要专门询问 Heaviside 阶跃函数,以消除它与文档所指的“阶跃函数”的歧义,后者是关于采样步骤,这与我正在寻找的内容无关如果相关文档存在,则很难找到相关文档。此外,我无法找到记录所有支持的转换的地方。

我想要1 if x >= 0 else 0,但是这样写是行不通的,因为大概x >= 0计算为一个对象,因此if表达式将立即计算为 1,然后h将始终为 1。

import pymc3 as pm

with pm.Model() as model:
    x = pm.Normal('x', mu=0, sigma=1)
    h = pm.Deterministic('h', 1 if x >= 0 else 0)  # ???

标签: pythonbayesianpymc3

解决方案


尝试使用theano.tensor.switch. 那是,

import pymc3 as pm
import theano.tensor as tt

with pm.Model() as model:
    x = pm.Normal('x', mu=0, sigma=1)
    h = pm.Deterministic('h', tt.switch(x < 0, 0, 1))

推荐阅读