我试图将任意数量的高斯峰拟合到我的数据中 . 我计划一次只查看我的数据集的片段;然而,在每个片段中,我可能需要尝试适合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:使用序列设置数组元素 .

但是,我还没有找到一种方法来做到这一点,而不会得到某种返回错误 . 有什么建议?