Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用Python3.x从scipy使用**曲线拟合**函数拟合多重高斯分布_Python 3.x_Scipy - Fatal编程技术网

Python 3.x 使用Python3.x从scipy使用**曲线拟合**函数拟合多重高斯分布

Python 3.x 使用Python3.x从scipy使用**曲线拟合**函数拟合多重高斯分布,python-3.x,scipy,Python 3.x,Scipy,我正在尝试使用scipy和Python3.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 trim

我正在尝试使用scipy和Python3.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个初始猜测


我感谢你的意见

看起来您试图分别调用九次
curve\u fit
,并通过指定
p0=p[i]
给它一个不同的初始参数猜测(这可能不是您的代码所做的,因为
p
是一个嵌套列表)

您应该确保
p
是一个包含9个元素的一维数组,并且只调用
curve\u fit
一次。差不多

p = np.array([list(t) for t in zip(centroid, sigma, height)]).flatten()
popt, pcov = curve_fit(trimodal_gauss,my_x,my_y,p0=p]) 

可能会起作用。

看起来您试图分别调用九次
curve\u fit
,并通过指定
p0=p[i]
(这可能不是您的代码所做的,因为
p
是一个嵌套列表)

您应该确保
p
是一个包含9个元素的一维数组,并且只调用
curve\u fit
一次。差不多

p = np.array([list(t) for t in zip(centroid, sigma, height)]).flatten()
popt, pcov = curve_fit(trimodal_gauss,my_x,my_y,p0=p]) 

可能有用。

谢谢。我确实意识到我没有制作1D阵列,但我不知道如何才能做到这一点!非常感谢。我确实意识到我没有制作1D阵列,但我不知道如何才能做到这一点!