另一個高斯擬合的問題,雖然有很多有用的教程/答案,但沒有一個似乎解決我的問題。我試圖找到適合裝箱的數據(從70-150,100個總數據點運行)。我對此很感興趣,所以如果有任何錯誤,請致歉。試圖使用curve_fit來擬合直方圖(裝倉數據)與高斯來得到優化的意思,std
現在,代碼爲x_fit
和y_fit
發出錯誤,我不知道爲什麼。
錯誤是一個「無效的語法」錯誤,並且popt
和pcov
上的括號似乎沒有什麼區別。
似乎無法解決其餘的代碼,直到我弄清楚爲止,但如果任何人有如何優化高斯擬合分檔數據的建議,這將是非常有用的。
謝謝!
import pylab as py
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
#grabs data from csv - just a list of numbers
#gadata=np.genfromtxt('gaussian-lab1.csv', autostrip=True)
#grabs initial mean/std values from data
m1 = gadata.mean()
s1 = gadata.std()
def gaus(x, a, x0, sigma):
return a * np.exp(-(x - x0) ** 2/(2 * sigma ** 2))
data = py.hist(gadata, bins=10)
histx = [0.5 * data[1][i] + data[1][i + 1] for i in xrange(10)]
histy = data[0]
popt, pcov = curve_fit(gaus, histx, histy, p0=(1, m1, s1,))
x_fit = py.linspace(histx[0], histx[-1], 10)
y_fit = gaus(x_fit, *popt)
plt.plot(x_fit, y_fit, color='r')
#plots histogram
plt.hist(gadata, 10, normed=True)
#plots a gaussian with mean/std that matches data.. but want optimized
#fit1 = ss.norm(loc=m1, scale=s1)
#plt.plot(x1, histo.pdf(x1), 'r-', lw=2)
你得到的錯誤是什麼?在上面的代碼中,缺少對'popt,pcov = ...'行的括號 – deinonychusaur
@deinonychusaur xfit/yfit給出了一個「無效語法」的錯誤和對popt的括號,pcov似乎沒有區別 – EHC
也,在你的gaus方法中,curve_fit可能會發出一個負面的西格瑪,如果我的大腦不缺咖啡,它應該是無效的。這可以通過在方法中添加'sigma = np.log(sigma)'並在解決方案被加入之後使用'popt [2] = np.power(np.e,popt [2])'來解決。 – deinonychusaur