as_model#

pymc_extras.as_model(*model_args, **model_kwargs)[source]#

装饰器为函数中声明的 PyMC 模型提供上下文。这消除了对上下文管理器进行思考的所有需求,并允许您将创建生成模型与使用模型分离开来。此外,函数中添加了一个 coords 参数,以便可以在函数调用期间更改坐标。

改编自 Rob Zinkov 的博客文章,并受到 PyMC3 的 sampled 装饰器的启发。

示例

import pymc as pm
import pymc_extras as pmx

# The following are equivalent

# standard PyMC API with context manager
with pm.Model(coords={"obs": ["a", "b"]}) as model:
    x = pm.Normal("x", 0., 1., dims="obs")
    pm.sample()

# functional API using decorator
@pmx.as_model(coords={"obs": ["a", "b"]})
def basic_model():
    pm.Normal("x", 0., 1., dims="obs")

m = basic_model()
pm.sample(model=m)

# alternative way to use functional API
@pmx.as_model()
def basic_model():
    pm.Normal("x", 0., 1., dims="obs")

m = basic_model(coords={"obs": ["a", "b"]})
pm.sample(model=m)