2017-10-19 21 views
1

J'essaie d'utiliser des fonctions gaussiennes trimodales en utilisant scipy et python 3.x. Je pense que je suis vraiment presque là mais je me gratte la tête parce que je n'arrive pas à comprendre ce qui ne va pas.Ajuster plusieurs gaussiennes en utilisant la fonction ** curve_fit ** de scipy en utilisant 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]) 

En utilisant ce code, je reçois l'erreur suivante. Je comprends ce que le message d'erreur dit mais je ne pense pas comprendre comment je ne fournis pas les 6 suppositions initiales.

J'apprécie votre contribution!

Répondre

0

On dirait que vous essayez d'appeler curve_fit neuf fois séparés, et lui donner une estimation initiale des paramètres différents en spécifiant p0=p[i] (ce qui est probablement pas ce que votre code fait, parce que p est une liste imbriquée).

Vous devez vous assurer que p est un tableau unidimensionnel avec 9 éléments et appeler curve_fit une seule fois. Quelque chose comme

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]) 

peut fonctionner.

+0

Merci. J'ai réalisé que je ne faisais pas un tableau 1D mais je ne savais pas comment je pouvais le faire! – user7852656