Python做数据正态拟合
时间: 2023-11-19 22:07:45 浏览: 185
在Python中,可以使用SciPy库中的stats模块来进行数据的正态分布拟合。具体步骤如下:
1. 导入所需的库
```python
import numpy as np
from scipy.stats import norm
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
```
2. 准备数据
准备需要拟合的数据,假设数据存储在一个Numpy数组中。
```python
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
```
3. 定义正态分布函数
```python
def normal_distribution(x, mu, sigma):
return 1/(sigma*np.sqrt(2*np.pi))*np.exp(-0.5*((x-mu)/sigma)**2)
```
4. 进行拟合
使用curve_fit函数进行数据拟合。
```python
popt, pcov = curve_fit(normal_distribution, data, density=True)
```
其中popt是拟合函数的参数,pcov是协方差矩阵。
5. 绘制拟合结果
使用matplotlib库绘制拟合结果:
```python
plt.hist(data, bins=10, density=True)
plt.plot(np.arange(0, 11, 0.1), normal_distribution(np.arange(0, 11, 0.1), *popt), 'r')
plt.show()
```
其中,np.arange(0, 11, 0.1)生成了一系列x坐标,用来绘制拟合曲线。*popt表示将popt元组中的参数解包作为函数的参数传入。
完整代码如下:
```python
import numpy as np
from scipy.stats import norm
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
def normal_distribution(x, mu, sigma):
return 1/(sigma*np.sqrt(2*np.pi))*np.exp(-0.5*((x-mu)/sigma)**2)
popt, pcov = curve_fit(normal_distribution, data, density=True)
plt.hist(data, bins=10, density=True)
plt.plot(np.arange(0, 11, 0.1), normal_distribution(np.arange(0, 11, 0.1), *popt), 'r')
plt.show()
```
阅读全文