我从“” Bayesian Methods for Hackers“中读取了示例,并且注意到通过python上下文获得的一种”魔术“:
在PyMC3中,我们通常在
Model
对象的上下文中处理模型中所需的所有变量。 与PyMC相比,这是额外的便利层。 在给定模型的上下文中创建的任何变量将是 自动分配给该模型。 如果您尝试在模型上下文之外定义变量,那么您会收到错误消息。
有问题的代码是这个
import pymc3 as pm
with pm.Model() as model:
parameter = pm.Exponential("poisson_param", 1.0)
data_generator = pm.Poisson("data_generator", parameter)
我试图用定义了__enter__
和__exit__
方法的自定义玩具类来复制这种行为,但是无法创建一个能使“在给定模型上下文中创建的任何变量都可以自动分配给该模型”
答案 0 :(得分:1)
好的。
这些对象基本上是“智能”的,因为它们以某种方式知道当前上下文(模型)是什么,并在其中注册自己。
这是一个示例(它也支持输入嵌套上下文,尽管它们之间目前没有任何父/子层次结构。)
int i = Integer.parseInt(vars.get("{count_num}").trim());