使用python 3.x从scipy使用** curve_fit **函数拟合多个高斯函数

时间:2017-10-19 21:14:13

标签: python-3.x scipy

我正在尝试使用scipy和python 3.x修正高斯函数。我觉得我差不多了,但是我在这里摸不着头脑,因为我无法弄清楚它出了什么问题。

        data =np.loadtxt('mock.txt')
        my_x=data[:,0]
        my_y=data[:,1]

        def gauss(x,mu,sigma,A):
            return A*np.exp(-(x-mu)**2/2/sigma**2)
        def trimodal_gauss(x,mu1,sigma1,A1,mu2,sigma2,A2,mu3,sigma3,A3):
            return gauss(x,mu1,sigma1,A1)+gauss(x,mu2,sigma2,A2)+gauss(x,mu3,sigma3,A3)



        """""
        Gaussian fitting parameters recognized in each file
        """""
        first_centroid=(10180.4*2+9)/9
        second_centroid=(10180.4*2+(58.6934*1)+7)/9
        third_centroid=(10180.4*2+(58.6934*2)+5)/9
        centroid=[]
        centroid+=(first_centroid,second_centroid,third_centroid)

        apparent_resolving_power=1200
        sigma=[]
        for i in range(len(centroid)):
            sigma.append(centroid[i]/((apparent_resolving_power)*2.355))

        height=[1,1,1]

        p=[]    

        p = [list(t) for t in zip(centroid, sigma, height)] 


        for i in range(9):
            popt, pcov = curve_fit(trimodal_gauss,my_x,my_y,p0=p[i]) 

使用此代码,我收到以下错误。

TypeError: trimodal_gauss() missing 6 required positional arguments: 'mu2', 'sigma2', 'A2', 'mu3', 'sigma3', and 'A3'

我理解错误信息的内容,但我不认为我理解我未提供6个初步猜测。

感谢您的投入!

1 个答案:

答案 0 :(得分:0)

看起来你试图单独调用curve_fit九次,并通过指定p0=p[i](可能不是你的代码所做的那样)给它一个不同的初始参数猜测,因为{{1}是一个嵌套列表。)

您应该确保p是包含9个元素的一维数组,并且只调用p一次。像

这样的东西
curve_fit

可能有用。