我一直在尝试在我的数据上拟合二维高斯分布。我有一个(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)
谢谢你的帮助
不完全-
mask[:, :2].shape
是(n, 2)
,所以它必须是x, y = Var.T
-或者当然你可以把mask[:, :2].T
传递给curve_fit()
相关问题 更多 >
编程相关推荐