我得到了一个数组,当我绘制它的时候,我得到了一个带有噪声的高斯形状。我想拟合高斯分布。这是我已经得到的,但是当我画出来的时候,我没有得到一个拟合高斯函数,而是得到一条直线。我试过很多不同的方法,但我就是想不出来。
random_sample=norm.rvs(h)
parameters = norm.fit(h)
fitted_pdf = norm.pdf(f, loc = parameters[0], scale = parameters[1])
normal_pdf = norm.pdf(f)
plt.plot(f,fitted_pdf,"green")
plt.plot(f, normal_pdf, "red")
plt.plot(f,h)
plt.show()
您可以使用^{} 中的
fit
,如下所示:norm.fit
试图根据数据拟合正态分布的参数。在上面的例子中,mean
大约是2,std
大约是5。为了绘制它,可以执行以下操作:
蓝框是数据的直方图,绿线是带有拟合参数的高斯分布。
您还可以使用scipy.optimize()中的curve_fit拟合高斯函数,在这里您可以定义自己的自定义函数。这里,我给出一个高斯曲线拟合的例子。例如,如果有两个数组
x
和y
。曲线拟合函数需要用三个参数调用:要拟合的函数(在本例中为gaus())、自变量的值(在本例中为x)和从属变量的值(在本例中为y)。curve_fit funtion than返回具有最佳参数的数组(在最小二乘意义上)和包含最佳参数协方差的第二个数组(稍后将详细介绍)。
下面是拟合的输出。
有很多方法可以将高斯函数拟合到数据集。我经常在拟合数据时使用astropy,这就是为什么我想添加这个作为额外的答案。
我使用的一些数据集应该模拟高斯噪声:
然后拟合它实际上非常简单,您可以指定要拟合数据的模型和拟合者:
并绘制:
不过,也可以只使用Scipy,但必须自己定义函数:
这将返回拟合的最佳参数,您可以这样绘制:
相关问题 更多 >
编程相关推荐