pymc3 海维赛德阶跃函数

pymc3 Heaviside step function

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

任何阶跃函数都可以使用,但我问的是 Heaviside 阶跃函数,专门用于消除文档中提到的 "step function" 的歧义,后者讨论的是 采样 步骤,这些步骤与我正在寻找的内容无关,并且如果存在相关文档,则很难找到相关文档。此外,我无法找到记录所有支持的转换的地方。

我想要 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)  # ???

尝试使用 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))