scipy.optimize.curve_fit,不受支持的操作数类型

时间:2020-08-06 22:51:33

标签: python scipy curve-fitting

我正在尝试使用scipy.curve_fit将曲线拟合到数据。这是我的dataset

这是我的代码:

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均为“无”。它们也共享相同的大小。 预先谢谢大家。

0 个答案:

没有答案
相关问题