首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中使用curve_fit拟合曲线的误差

在python中使用curve_fit拟合曲线的误差
EN

Stack Overflow用户
提问于 2021-09-16 16:51:18
回答 1查看 150关注 0票数 0

--我试着用Curve_fit函数:将下一个函数放入一些数据中

代码语言:javascript
运行
复制
def sinugauss(x, A, B, C):
    exponente = A*(np.sin(x-B))**2
    return np.array([C/(np.exp(exponente))])

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

代码语言:javascript
运行
复制
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

这是完整的代码:

代码语言:javascript
运行
复制
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点。可能会有零

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-16 17:23:35

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

代码语言:javascript
运行
复制
    return C/np.exp(exponente)

在编写np.array([C/(np.exp(exponente))])时,您正在将表达式C/np.exp(exponente)包装起来,该表达式可能是带有形状的数组(例如(3,) ),封装在带有形状(1, 3)的二维数组中。这不是curve_fit从您的函数中期望的形状。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69212304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档