在 python 中使用 curve_fit 拟合曲线时出错
Error in Fitting a curve using curve_fit in python
我正在尝试使用 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:\lib\site-packages\scipy\optimize\minpack.py", line 789, in curve_fit\
res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)\
File "D:\lib\site-packages\scipy\optimize\minpack.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 点。可能有零
谢谢
在函数sinugauss
中,将return语句改为:
return C/np.exp(exponente)
当你写 np.array([C/(np.exp(exponente))])
时,你将表达式 C/np.exp(exponente)
包裹起来,它可能是一个形状为 (3,)
的数组,在一个形状为 (3,)
的二维数组中=15=]。这不是 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:\lib\site-packages\scipy\optimize\minpack.py", line 789, in curve_fit\
res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)\
File "D:\lib\site-packages\scipy\optimize\minpack.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 点。可能有零
谢谢
在函数sinugauss
中,将return语句改为:
return C/np.exp(exponente)
当你写 np.array([C/(np.exp(exponente))])
时,你将表达式 C/np.exp(exponente)
包裹起来,它可能是一个形状为 (3,)
的数组,在一个形状为 (3,)
的二维数组中=15=]。这不是 curve_fit
期望函数的形状。