Curve_fit для функции с несколькими переменными приводит к "объекту, слишком глубокому для требуемого массива"

Я пытаюсь подогнать 2D-функцию, используя кривую SciPy. Код является:

import numpy as np
from scipy.optimize import curve_fit

rh_list = np.logspace(-4,0,100)
M0_list = np.logspace(8,15,100)

def myfunc(M,a,b,c):
    return 10**((a*(np.log10(M)))**b + c)
def myfunc2(r,a,alpha,b,beta,A):
    return a*(r)**(-alpha) + b*(r)**(-beta) + A*np.exp(-1./r)
def myfunc_comb(X,a1,b1,c1,a2,alpha,b2,beta,A):
    M,r = X
    return myfunc(M,a1,b1,c1)*myfunc2(r,a2,alpha,b2,beta,A)

params, pcov = curve_fit(myfunc_comb, (M0_list, rh_list),Z,p0=(1.,1.,1.,1.,1.,1.,1.,1.), maxfev=20000)

Z определяется M0_list,rh_list таким образом, что это слишком сложно, чтобы писать здесь (и я надеюсь, что это не нужно будет решать). Я получаю следующую ошибку:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
ValueError: object too deep for desired array

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-775-a436d168d234> in <module>()
----> 1 params, pcov = curve_fit(myfunc_comb, (M0_list, rh_list),Z,p0=(1.,1.,1.,1.,1.,1.,1.,1.), maxfev=20000)

c:\python27\lib\site-packages\scipy\optimize\minpack.pyc in curve_fit(f, xdata, ydata, p0, sigma, absolute_sigma, check_finite, bounds, method, jac, **kwargs)
    740         # Remove full_output from kwargs, otherwise we're passing it in twice.
    741         return_full = kwargs.pop('full_output', False)
--> 742         res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)
    743         popt, pcov, infodict, errmsg, ier = res
    744         cost = np.sum(infodict['fvec'] ** 2)

c:\python27\lib\site-packages\scipy\optimize\minpack.pyc in leastsq(func, x0, args, Dfun, full_output, col_deriv, ftol, xtol, gtol, maxfev, epsfcn, factor, diag)
    385             maxfev = 200*(n + 1)
    386         retval = _minpack._lmdif(func, x0, args, full_output, ftol, xtol,
--> 387                                  gtol, maxfev, epsfcn, factor, diag)
    388     else:
    389         if col_deriv:

error: Result from function call is not a proper array of floats.    
    c:\python27\lib\site-packages\scipy\optimize\minpack.pyc in curve_fit(f, xdata, ydata, p0, sigma, absolute_sigma, check_finite, bounds, method, jac, **kwargs)
        740         # Remove full_output from kwargs, otherwise we're passing it in twice.
        741         return_full = kwargs.pop('full_output', False)
    --> 742         res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)
        743         popt, pcov, infodict, errmsg, ier = res
        744         cost = np.sum(infodict['fvec'] ** 2)

    c:\python27\lib\site-packages\scipy\optimize\minpack.pyc in leastsq(func, x0, args, Dfun, full_output, col_deriv, ftol, xtol, gtol, maxfev, epsfcn, factor, diag)
        385             maxfev = 200*(n + 1)
        386         retval = _minpack._lmdif(func, x0, args, full_output, ftol, xtol,
    --> 387                                  gtol, maxfev, epsfcn, factor, diag)
        388     else:
        389         if col_deriv:

    error: Result from function call is not a proper array of floats.

0 ответов

Другие вопросы по тегам