我正在使用与此non linear curvefitting问题中提到的代码类似的代码分析数据:
# define the model/function to be fitted.
def model(x, f):
amp = pymc.Uniform('amp', 0.05, 0.4, value= 0.15)
size = pymc.Uniform('size', 0.5, 2.5, value= 1.0)
ps = pymc.Normal('ps', 0.13, 40, value=0.15)
@pymc.deterministic(plot=False)
def gauss(x=x, amp=amp, size=size, ps=ps):
e = -1*(np.pi**2*size*x/(3600.*180.))**2/(4.*np.log(2.))
return amp*np.exp(e)+ps
y = pymc.Normal('y', mu=gauss, tau=1.0/f_error**2, value=f, observed=True)
return locals()
MDL = pymc.MCMC(model(x,f))
MDL.sample(1e4)
在该示例中,我会说有三个拟合参数, amp , size 和 ps 。我们将要检查的参数数量称为 N 。现在让我们调用要绘制的样本数, P (在这种情况下为1e4)。我观察到@deterministic
函数gauss
被称为大致 N x P 次。
MDL
中是否有属性可以找出gauss
被调用的次数?答案 0 :(得分:0)
gauss
。 PyMC试图对此进行智能化,并缓存值,以便仅在节点的父级更改其值时重新计算它们。因此,每次gauss
,amp
和size
更改时,都会评估ps
。