簡體   English   中英

嘗試使用curve_fit使高斯擬合直方圖(合並數據)以獲取優化的均值,std

[英]Trying to use curve_fit to fit histogram (binned data) with a gaussian to get optimized mean, std

另一個高斯擬合問題,盡管有很多有用的教程/答案,但似乎沒有一個能解決我的問題。 我正在嘗試找到適合合並數據的高斯擬合(從70到150,總共100個數據點)。 我是新來的,如果有任何錯誤,敬請原諒。

現在,代碼為x_fity_fit引發錯誤,我不知道為什么。

該錯誤是“語法無效”錯誤,並且poptpcov上的括號似乎沒有什么區別。

在我弄清楚這一點之前,似乎無法對其余的代碼進行故障排除,但是,如果有人對如何優化對合並數據的高斯擬合提出建議,那將非常有幫助。

謝謝!

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)

根據定義,數據對高斯函數的最小最小二乘擬合與計算數據的均值和標准差相同。 在任何方面都是如此。 因此,您可以省去曲線擬合或任何其他擬合方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM