在python中使用curve_fit拟合曲线时出错



我正在尝试使用Scipy Curve_fit函数将下一个函数适合于一些数据:

def sinugauss(x, A, B, C):
exponente = A*(np.sin(x-B))**2
return np.array([C/(np.exp(exponente))])

我有一个33点的数据集,但我一直得到这个错误:

Traceback (most recent call last):
File "D:Es_periodico_o_no.py", line 35, in <module>
res, cov = curve_fit(sinugauss,datos['x'],datos['y'])
File "D:libsite-packagesscipyoptimizeminpack.py", line 789, in curve_fit
res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)
File "D:libsite-packagesscipyoptimizeminpack.py", line 414, in leastsq
raise TypeError(f"Improper input: func input vector length N={n} must"
TypeError: Improper input: func input vector length N=3 must not exceed func output vector length M=1

完整代码:

def sinugauss(x, Ventas, Inicio, Desv):
exponente = Desv*(np.sin(x-Inicio))**2
return np.array([Ventas/(np.exp(exponente))])
for index, row in real_df.iterrows():
datos_y = np.array([row]).transpose()
datos_x = np.array([range(len(datos_y))]).transpose()
datos = pd.DataFrame(np.column_stack([datos_x,datos_y]),columns=['x','y'])
res, cov = curve_fit(sinugauss,datos['x'],datos['y'])
print(res)
print(cov)

错误从第一次迭代开始,所有行有33个非nan点。可能有0

谢谢

在函数sinugauss中,将返回语句更改为:

return C/np.exp(exponente)

当您编写np.array([C/(np.exp(exponente))])时,您将表达式C/np.exp(exponente)(可能是形状为(3,)的数组)包装在形状为(1, 3)的二维数组中。这不是curve_fit期望从你的函数中得到的形状。

相关内容

最新更新