如何解决尝试拟合线条时出现“不正确的输入:N=2 不得超过 M=1”错误
代码是将两个单独的数据分成两条单独的直线并确定哪个配置最适合
def straight_line(x,m,c):
return m*x + c
def sep_point(x,y):
seperation = 2
r_sqr = []
while seperation < len(x):
x_1 = x[:seperation]
y_1 = y[:seperation]
x_2 = x[seperation:]
y_2 = y[seperation:]
popt_1,pcov_1 = curve_fit(straight_line,x_1,y_1)
popt_2,pcov_2 = curve_fit(straight_line,x_2,y_2)
res_1 = y_1 - straight_line(x_1,*popt_1)
res_2 = y_2 - straight_line(x_2,*popt_2)
res_sqr_1 = np.sum(res_1**2)
res_sqr_2 = np.sum(res_2**2)
ss_1 = np.sum((y_1-np.mean(y_1))**2)
ss_2 = np.sum((y_2-np.mean(y_2))**2)
r_sqr_1 = 1 - (res_sqr_1 / ss_1)
r_sqr_2 = 1 - (res_sqr_2 / ss_2)
r_sqr.append(r_sqr_1 * r_sqr_2)
seperation += 1
return (r_sqr)
然后我得到这个回溯错误
TypeError Traceback (most recent call last)
<ipython-input-42-638d4928b679> in <module>
----> 1 test = sep_point(decelleration_voltage[:-1],lnRevColdShieldI[:-1])
<ipython-input-41-7aa65ea99d01> in sep_point(x,y)
10
11 popt_1,y_1)
---> 12 popt_2,y_2)
13
14 res_1 = y_1 - straight_line(x_1,*popt_1)
~\Anaconda3\lib\site-packages\scipy\optimize\minpack.py in curve_fit(f,xdata,ydata,p0,sigma,absolute_sigma,check_finite,bounds,method,jac,**kwargs)
742 # Remove full_output from kwargs,otherwise we're passing it in twice.
743 return_full = kwargs.pop('full_output',False)
--> 744 res = leastsq(func,Dfun=jac,full_output=1,**kwargs)
745 popt,pcov,infodict,errmsg,ier = res
746 cost = np.sum(infodict['fvec'] ** 2)
~\Anaconda3\lib\site-packages\scipy\optimize\minpack.py in leastsq(func,x0,args,Dfun,full_output,col_deriv,ftol,xtol,gtol,maxfev,epsfcn,factor,diag)
385 m = shape[0]
386 if n > m:
--> 387 raise TypeError('Improper input: N=%s must not exceed M=%s' % (n,m))
388 if epsfcn is None:
389 epsfcn = finfo(dtype).eps
TypeError: Improper input: N=2 must not exceed M=1
(注意:输入的最后一段数据被截断以停止一个不起作用的'inf'值
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。