作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否有一种好方法可以将高斯法线与 numpy 数组形式的直方图相匹配 np.histogram(array, bins)
。
如何将这样的曲线绘制在同一张图上,并根据直方图调整高度和宽度?
最佳答案
您可以使用高斯(即正态)分布拟合直方图,例如使用 scipy 的 curve_fit。我在下面写了一个小例子。请注意,根据您的数据,您可能需要找到一种方法来很好地猜测拟合的起始值 (p0)。初始值不佳可能会导致拟合失败。
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
from scipy.stats import norm
def fit_func(x,a,mu,sigma,c):
"""gaussian function used for the fit"""
return a * norm.pdf(x,loc=mu,scale=sigma) + c
#make up some normally distributed data and do a histogram
y = 2 * np.random.normal(loc=1,scale=2,size=1000) + 2
no_bins = 20
hist,left = np.histogram(y,bins=no_bins)
centers = left[:-1] + (left[1] - left[0])
#fit the histogram
p0 = [2,0,2,2] #starting values for the fit
p1,_ = curve_fit(fit_func,centers,hist,p0,maxfev=10000)
#plot the histogram and fit together
fig,ax = plt.subplots()
ax.hist(y,bins=no_bins)
x = np.linspace(left[0],left[-1],1000)
y_fit = fit_func(x, *p1)
ax.plot(x,y_fit,'r-')
plt.show()
关于python - 如何将高斯法线与直方图相匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60801765/
我是一名优秀的程序员,十分优秀!