如何解决循环合法参数
我正在迭代 N 个文件并使用 lmfit 高斯模型拟合所有数据。我想获取不同文件的所有参数的数组,以便我可以针对另一个变量绘制它们。知道怎么做吗?
这是我的代码:
def gaussian(x,center,sigma,amplitude):
return amplitude*(1/(sigma*(np.sqrt(2*np.pi))))*np.exp(((-(x-center)**2))/(2*(sigma**2)))
for f in os.listdir(directory):
f= os.path.join(directory,f)
data=np.loadtxt(f)
x=data[np.where(data[:,0]<wavemax),0]
y=data[np.where(data[:,1]
x=x[0,np.where(x[0]>wavemin)][0]
y=y[0,np.where(x>wavemin)][0]
gauss1 = Model(gaussian,prefix='g1_')
pars=gauss1.make_params()
pars['g1_center'].set(2855.0,True,2830.0,2900.0)
pars['g1_sigma'].set(6,1.0,20.0)
pars['g1_amplitude'].set(0.6,0.01,30)
gauss2 = Model(gaussian,prefix='g2_')
pars.update(gauss2.make_params())
pars['g2_center'].set(2900.0,2850.0,2950.0)
pars['g2_sigma'].set(10.0,20.0)
pars['g2_amplitude'].set(0.6,30)
gauss3 = Model(gaussian,prefix='g3_')
pars.update(gauss3.make_params())
pars['g3_center'].set(2925.0,2950.0)
pars['g3_sigma'].set(10.0,50.0)
pars['g3_amplitude'].set(3,30)
gauss4 = Model(gaussian,prefix='g4_')
pars.update(gauss4.make_params())
pars['g4_center'].set(2970.0,3000.0)
pars['g4_sigma'].set(14.0,20.0)
pars['g4_amplitude'].set(3,30)
gauss5= Model(gaussian,prefix='g5_')
pars.update(gauss5.make_params())
pars['g5_center'].set(3050,2750,3050,None,None)
pars['g5_sigma'].set(100,None)
pars['g5_amplitude'].set(5,None)
mod=gauss1+gauss2+gauss3+gauss4+gauss5 # fitting the entire curve
init = mod.eval(pars,x=x) #specifying the parameters for the fitting of all the curve
out = mod.fit(y,pars,x=x)
解决方法
在循环之前制作一个 results
列表,对于每次拟合,在拟合完成后,将 out.params
附加到该 results
列表(可能还有其他有助于标记拟合细节的内容) ).
然后根据需要使用结果拟合参数列表。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。