python对二维数据进行二维高斯拟合
时间: 2023-07-24 13:48:12 浏览: 829
在Python中,可以使用SciPy库的`curve_fit`函数进行二维高斯拟合。以下是一个简单的示例代码:
```python
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
# 生成数据
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = np.exp(-X**2 - Y**2)
# 添加噪音
Z_noisy = Z + 0.1*np.random.randn(*Z.shape)
# 二维高斯模型
def gaussian(xy, a, x0, y0, sigma_x, sigma_y):
x, y = xy
return a*np.exp(-((x-x0)**2/(2*sigma_x**2) + (y-y0)**2/(2*sigma_y**2)))
# 初始参数
a0 = [1, 0, 0, 1, 1]
# 拟合
popt, pcov = curve_fit(gaussian, (X, Y), Z_noisy.ravel(), p0=a0)
# 绘图
fig = plt.figure()
ax = fig.add_subplot(1, 2, 1, projection='3d')
ax.plot_surface(X, Y, Z)
ax.set_title('Original')
ax = fig.add_subplot(1, 2, 2, projection='3d')
ax.plot_surface(X, Y, gaussian((X, Y), *popt).reshape(X.shape))
ax.set_title('Fitted')
plt.show()
```
该代码生成二维高斯分布的数据,添加噪音,并进行拟合。可以根据需要修改初始参数`a0`和高斯模型函数`gaussian`。其中,`curve_fit`函数的第一个参数是拟合函数,第二个参数是数据的自变量和因变量元组,第三个参数是数据的因变量,第四个参数是初始参数。
阅读全文