有缺陷数据的二维高斯曲线拟合

2024-06-16 11:14:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试在我的数据上拟合二维高斯分布。我有一个(x,y)贴图和每个坐标的z值。但是,我想去掉一些z值,但是因为curve_fit要求数组作为(x,y)参数,所以很难去掉(x,y)数组中对应的(x,y)值

我看到有很多解决方案(屏蔽数组,lmfit),但我选择了一个更简单的解决方案,因为我对python不是很在行

这是我的密码:

def gaussienne(Var, xo, yo, backgr, gx, gy, theta):
    
    x,y = Var
    
    a = np.cos(theta)**2/(2*gx**2) + np.sin(theta)**2/(2*gy**2)
    b = -np.sin(2*theta)/(4*gx**2) + np.sin(2*theta)/(4*gy**2)
    c = np.sin(theta)**2/(2*gx**2) + np.cos(theta)**2/(2*gy**2)
    
    res=backgr+np.exp(-(a*(x-xo)**2 + 2*b*(x-xo)*(y-yo)+ c*(y-yo)**2))
    
    return res.ravel() 

x=np.linspace(start_x,start_x+(taille_x)*step_x, taille_x)
y=np.linspace(start_y,start_y+(taille_y)*step_y, taille_y)
mask=[]

intensite=intensite.reshape(taille_x, taille_y)
for i in range(taille_x):
     for j in range (taille_y):
         if intensite[i,j]!=0:
               mask.append([x[i],y[j],intensite[i,j]])
mask=np.array(mask)

p0 = a, b, 80, 0.2, 0.2, 0.001
popt, pcov = curve_fit(gaussienne, mask[:,:2], mask[:,2], p0, maxfev=5000)

基本上,对于我想要获取的每个z值(即不等于0),我添加以屏蔽z值和相应的(x,y)坐标。掩码是一个元组列表。我把它变成一个数组,给它曲线拟合

然后我得到一个错误:ValueError:太多的值无法解包(预期为2个)

我不明白我是如何得到这个错误的,因为掩码[:,:2]是(2,n),掩码[:,2]是(1,n)

谢谢你的帮助


Tags: npmask数组sinstartfitgycurve