我正在尝试将任意数量的高斯峰拟合到我的数据中。我计划一次只查看我的数据集的片段;然而,在每个片段中,我可能需要尝试适合2-10个峰值(它们不是最佳分辨率数据,我可能需要尝试几种不同的峰值组合以获得最佳答案)。我能够找到的多峰拟合的每个实现都使用了固定数量的峰值,而我当然可以手动改变拟合函数,我真的不愿意。这是我到目前为止所拥有的......
def fit_func(x,*params):
N=params[0]
center=params[1]
amp=params[2]
width=params[3]
data=np.array([],dtype=float)
data=0.
for i in range(N):
data=data+amp[i]*np.exp(-(x-center[i])**2/width[i]**2)
return(data)
f = np.array([2.3,3,8.06,9.38]) # frequency guesses
a=np.array([10,6,6,3]) #amplitude guesses
w=np.array([.5,1.,1,1])# witdth guesses
N=4
x0=[N,f,a,w]
f = np.array([2.3,3,8.06,9.38]) # frequency guesses
s=spectrum/100. #Set errorbars. Dividing by a hundred is just for testing
purposes
solution,covar= optimization.curve_fit(func,freq,spectrum,(x0,),s)
我对此抛出以下ValueError并不感到惊讶:使用序列设置数组元素。
但是,我还没有找到一种方法来做到这一点而不会出现某种返回错误。有什么建议吗?