尝试使用curve_fit使用高斯拟合直方图(分箱数据)以获得优化的平均值std

时间:2014-02-28 07:24:13

标签: python histogram gaussian

另一个高斯拟合问题,虽然有许多有用的教程/答案,但似乎没有一个能解决我的问题。我试图找到高斯拟合分档数据(从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)

1 个答案:

答案 0 :(得分:0)

根据定义,数据与高斯函数的最小最小二乘拟合与计算数据的均值和标准差相同。在任何方面都是如此。因此,您可以保存自己的曲线拟合或任何其他拟合方法。