scipy.optimize.curve_fit, неподдерживаемые типы операндов - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь подогнать кривую к данным с помощью scipy.curve_fit. Вот мой набор данных

Вот мой код:

def gaussian(x, A, x0, sig):
    return A*np.exp(-(x-x0)**2/(2*sig**2))

def mult_gaussian(x, *pars):
    offset = pars[-1]
    g1 = gaussian(x, pars[0], pars[1], pars[2])
    g2 = gaussian(x, pars[3], pars[4], pars[5])
    return

x, y = np.loadtxt('F:...\datafile_Et_p(Et).txt', unpack = True)

x = np.array(x)
y = np.array(y)


guess = [0.35, 0.06, 1, 0.15, 5.6,1]

popt, pcov = curve_fit(mult_gaussian, x, y, guess)
plt.figure()
plt.plot(x,y,'-', linewith = 4, label='data set')
plt.plot(x, mult_gaussian(x, *popt), 'r--', linewidth = 2, label = 'Fit')
plt.legend()
plt.show()

Однако, когда я пытаюсь выполнить его, я получил эту ошибку:


    popt, pcov = curve_fit(mult_gaussian, x, y, guess)
  File "c:\users\bleda\anaconda3\lib\site-packages\scipy\optimize\minpack.py", line 784, in curve_fit
    res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)
  File "c:\users\bleda\anaconda3\lib\site-packages\scipy\optimize\minpack.py", line 410, in leastsq
    shape, dtype = _check_func('leastsq', 'func', func, x0, args, n)
  File "c:\users\bleda\anaconda3\lib\site-packages\scipy\optimize\minpack.py", line 24, in _check_func
    res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
  File "c:\users\bleda\anaconda3\lib\site-packages\scipy\optimize\minpack.py", line 484, in func_wrapped
    return func(xdata, *params) - ydata
TypeError: unsupported operand type(s) for -: 'NoneType' and 'float'

x и y:

>>> x
array([4.261000e-03, 2.414800e-02, 4.403400e-02, ..., 5.930398e+00,
       5.950284e+00, 5.970170e+00])

>>> y
array([ 0.028409,  0.068182,  0.107955, ..., 11.880682, 11.920455,
       11.960227])

Как видите, x и y помечены как «Нет». Они также имеют одинаковый размер. Заранее спасибо.

...