我正在尝试将非对称高斯拟合到我的数据中。我的数据只是一个名为 wave (x) 的 numpy 数组和一个名为 spec (y) 的 numpy 数组,看起来像一个非对称高斯。
这是带有拟合曲线拟合的不对称高斯数据的图像(这也有一个连续体,但这现在并不重要。
这是功能:
def agauss(amp, cen, b_sigma, r_sigma, x):
y = np.zeros(len(x))
for i in range(len(x)):
if x[i] < cen:
y[i] = amp*np.exp(-((x[i] - cen)**2)/(2*b_sigma**2))
else:
y[i] = amp*np.exp(-((x[i] - cen)**2)/(2*r_sigma**2))
return y
我正在使用此代码来拟合参数:
with pm.Model() as asym:
cen = pm.Uniform('cen', lower=5173, upper=5179)
bsigma = pm.HalfCauchy('bsigma', beta=3)
rsigma = pm.HalfCauchy('rsigma', beta=3)
amp = pm.Uniform('amp', lower=1e-19, upper=1e-16)
err = pm.HalfCauchy('err', beta=0.0000001)
ag_pred = pm.Normal('ag_pred', mu=agauss(amp, cen, bsigma, rsigma, wave), sigma=err, observed=spec)
agdata = pm.sample(3000, cores=2)
但是我在 theano.tensor 模块中收到错误“变量不支持布尔运算”。我应该如何定义函数以适应参数?有更好的方法来做到这一点吗?谢谢!!
144 err = pm.HalfCauchy('err', beta=0.0000001)
145
--> 146 ag_pred = pm.Normal('ag_pred', mu=agauss(amp, cen, bsigma, rsigma, wave), sigma=err, observed=spec)
147
148 agdata = pm.sample(3000, cores=2)
~/Documents/OIII_emitters/m2fs_reduction/test/assets/scripts/analysis.py in agauss(amp, cen, b_sigma, r_sigma, x)
118 y = np.zeros(len(x))
119 for i in range(len(x)):
--> 120 if x[i] < cen:
121 y[i] = amp*np.exp(-((x[i] - cen)**2)/(2*b_sigma**2))
122 else:
~/anaconda3/envs/data_science/lib/python3.7/site-packages/theano/tensor/var.py in __bool__(self)
92 else:
93 raise TypeError(
---> 94 "Variables do not support boolean operations."
95 )
96
TypeError: Variables do not support boolean operations.