对bin_centers, hist进行一维高斯拟合python代码
时间: 2024-03-27 11:39:36 浏览: 86
python做数据拟合
可以使用`scipy`库中的`curve_fit`函数来对一维直方图进行高斯拟合。下面是一个简单的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
# 生成随机数据
data = np.random.randn(1000)
# 绘制直方图
hist, bin_edges = np.histogram(data, bins=50, density=True)
bin_centers = (bin_edges[:-1] + bin_edges[1:]) / 2
plt.bar(bin_centers, hist, width=0.05)
# 高斯分布函数
def gaussian(x, a, b, c):
return a * np.exp(-(x - b) ** 2 / (2 * c ** 2))
# 初始参数猜测值
p0 = [1, 0, 1]
# 使用curve_fit进行高斯拟合
popt, pcov = curve_fit(gaussian, bin_centers, hist, p0=p0)
# 绘制拟合曲线
x = np.linspace(bin_centers[0], bin_centers[-1], 100)
plt.plot(x, gaussian(x, *popt), 'r', linewidth=2)
# 显示图像
plt.show()
```
在上述代码中,首先生成了一组随机数据,并使用`np.histogram()`函数计算了直方图和对应的bin_centers。然后,定义了高斯分布函数`gaussian()`和初始参数猜测值`p0`。接下来,使用`curve_fit()`函数进行高斯拟合,并得到了拟合参数`popt`和协方差矩阵`pcov`。最后,使用`plt.plot()`函数绘制了拟合曲线,并显示了图像。
需要注意的是,`curve_fit()`函数需要提供拟合函数、自变量和因变量,其中拟合函数需要是一个函数句柄,用于计算拟合值。在本例中,拟合函数为`gaussian()`,自变量为`bin_centers`,因变量为`hist`。`p0`是初始参数猜测值,可以根据实际情况进行调整。
阅读全文