scipy.optimize.curve#u拟合不';当要拟合的函数只有一个参数时,它不工作
我试图用振幅作为参数来拟合正弦+余弦曲线,而曲线拟合似乎不能和只有一个参数的函数一起工作scipy.optimize.curve#u拟合不';当要拟合的函数只有一个参数时,它不工作,scipy,curve-fitting,Scipy,Curve Fitting,我试图用振幅作为参数来拟合正弦+余弦曲线,而曲线拟合似乎不能和只有一个参数的函数一起工作 import numpy as np import scipy.optimize as scio def function(x,a): y = a*np.sin(np.radians(x)) return y x = np.array(range(360)) y = function(x,3) yn = y +0.2 * np.random.normal(size=len(x)) pop
import numpy as np
import scipy.optimize as scio
def function(x,a):
y = a*np.sin(np.radians(x))
return y
x = np.array(range(360))
y = function(x,3)
yn = y +0.2 * np.random.normal(size=len(x))
popt,pcov = scio.curve_fit(function,x,yn)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/Users/mj/Documents/NACO/VLT/DataReduction/<ipython-input-62-388a2d20a0c8> in <module>()
----> 1 popt,pcov = scio.curve_fit(function,x,yn)
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/optimize/minpack.pyc in curve_fit(f, xdata, ydata, p0, sigma, **kw)
416
417 if (len(ydata) > len(p0)) and pcov is not None:
--> 418 s_sq = (func(popt, *args)**2).sum()/(len(ydata)-len(p0))
419 pcov = pcov * s_sq
420 else:
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/optimize/minpack.pyc in _general_function(params, xdata, ydata, function)
319
320 def _general_function(params, xdata, ydata, function):
--> 321 return function(xdata, *params) - ydata
322
323 def _weighted_general_function(params, xdata, ydata, function, weights):
TypeError: function() argument after * must be a sequence, not numpy.float64
将numpy导入为np
导入scipy.optimize作为scio
def功能(x,a):
y=a*np.sin(np.radians(x))
返回y
x=np.阵列(范围(360))
y=函数(x,3)
yn=y+0.2*np.随机.正常(尺寸=len(x))
popt,pcov=scio.曲线拟合(函数,x,yn)
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
/用户/mj/Documents/NACO/VLT/DataReduce/in()
---->1 popt,pcov=scio.曲线拟合(函数,x,yn)
/库/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/optimize/minpack.pyc曲线拟合(f,扩展数据,ydata,p0,sigma,**kw)
416
417如果(len(ydata)>len(p0))和pcov不是无:
-->418 s_sq=(func(popt,*args)**2).sum()/(len(ydata)-len(p0))
419 pcov=pcov*s_sq
420其他:
/函数中的Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/optimize/minpack.pyc(参数、扩展数据、ydata、函数)
319
320定义通用函数(参数、扩展数据、ydata、函数):
-->321返回函数(扩展数据,*参数)-ydata
322
323定义加权通用函数(参数、扩展数据、ydata、函数、权重):
TypeError:*后面的function()参数必须是序列,而不是numpy.float64
为什么曲线拟合会出现这样的问题?
我做错什么了吗
提前谢谢!
MJOFWIW,您的代码使用
numpy 1.7.1
,scipy 0.11.0
为我运行,未经修改。非常感谢!!!!事实证明,我的numpy和scipy版本都非常旧……现在它工作得非常好:)。谢谢!