在python中使用lmfit将数据拟合到2D函数

在python中使用lmfit将数据拟合到2D函数,python,lmfit,Python,Lmfit,我希望使用2D函数拟合数据,以便使用lmfit包提取参数(a)和(b)。基本上,作为一维函数拟合,我尝试在相同坐标(x,y)处将每个数据点拟合到二维函数。这意味着每个数据点都有其与另一个数据点不同的初始猜测值,因为每个数据具有不同的坐标(x,y)。这是我的代码: #!/usr/bin/ python import pyfits import numpy as np import math from lmfit import minimize, Parame

我希望使用2D函数拟合数据,以便使用lmfit包提取参数(a)和(b)。基本上,作为一维函数拟合,我尝试在相同坐标(x,y)处将每个数据点拟合到二维函数。这意味着每个数据点都有其与另一个数据点不同的初始猜测值,因为每个数据具有不同的坐标(x,y)。这是我的代码:

    #!/usr/bin/ python
    import pyfits
    import numpy as np
    import math
    from lmfit import minimize, Parameters, Parameter, report_errors,report_fit,     
         conf_interval, printfuncs


    xn =np.linspace(0,3,4)    # x-component
    yn =np.linspace(0,3,4)    # y-component

    data= [0.0, 0.16, 0.33, 0.5, 0.2, 0.26, 0.38, 0.53, 0.4, 0.43, 0.52, 0.64, 0.6, 0.62,   
    0.67, 0.78]   # (x1,y1) generate (data[0]), (x1,y2) generate (data[1]) and so on


    params = Parameters()
    params.add('a', value=3)
    params.add('b', value=5)                     


    def residual(params,x,y,data=None):
        a = params['a'].value             # parameter
        b = params['b'].value             # parameter
        model=(x**2/a**2+y**2/b**2)**0.5      # 2D function            
        if data is None:
           return data
        return model - data


    out=minimize(residual,params,args=(x,y,data,))        # lmfit minimizer
    final=data+out.residual
    report_fit(params)
    ci = conf_interval(out, sigmas=[0.68,0.95])           # confidence interval
    printfuncs.report_ci(ci)
但是,我收到了以下错误消息:

    ValueError: operands could not be broadcast together with shapes (4) (16)  

显然,x和y的维数与数据的维数不同,但我不知道如何使数据[0]取(x1,y1),数据[1]取(x1,y2)…,数据[5]取(x2,y1)等等。请任何人帮我解决这个问题或提出任何建议,提前谢谢

您需要压缩数据吗

x = [x1, x2, ...]
y = [y1, y2, ...]
data = zip(x, y) # [(x1, y1), (x2, y2), ... ]

感谢您的回复,实际上我在数据之前添加了这个步骤x,y=np.ix_xn(xn,yn),它工作得很好。