python - Python,曲线拟合
问题描述
我想拟合一系列高斯函数,我事先不知道需要多少。这是我目前的解决方案。
def gauss_recursive(x,max_value,pos,std):
if len(pos)==1:
return gauss(x,max_value,pos,std)
else:
return gauss_recursive(x,max_value[:-1],pos[:-1],std[:-1])+gauss(x,max_value[-1],pos[-1],std[-1])
def gauss(x,max_value,pos,std):
from numpy import exp
return max_value*exp(-(x-pos)*(x-pos)/std/std)
我知道位置、标准和最大值。因此,即使在许多高斯函数的情况下,拟合也会收敛。但是,我需要曲线拟合才能将列表或元组传递给我的函数。当我启动它时,它会自动将它放入许多单个参数:
fit_para,err = curve_fit(gauss_recursive,x,y,p0=[[1,5,7],[11,15,14],[2.5,2.5,2.5]])
这会导致以下错误:
TypeError: gauss_recursive() takes 4 positional arguments but 10 were given
当我将 p0 作为元组而不是列表传递时,也会发生相同的效果。
有没有办法绕过这个问题?如果是怎么办?
这是解决方案:
def gauss_recursive(x,*args):
laenge=int(len(args)/3)
if laenge==1:
return gauss(x,args[0],args[1],args[2])
elif laenge>1:
from numpy import ones
dummy=ones(len(args))
dummy[laenge-1]=0
dummy[2*laenge-1]=0
dummy[-1]=0
dummy2=[args[i] for i in range(laenge*3) if dummy[i]==1]
return gauss_recursive(x,*dummy2)+gauss(x,args[laenge-1],args[2*laenge-1],args[-1])
else:
return -1
解决方案
推荐阅读
- python - 在以下数据框中为每个单元格查找重复值
- javascript - 用百分比分组数组
- javascript - 如何在 React useEffect 中使用函数
- python-3.x - 来自客户端的 Djanog 应用程序快速书授权页面
- python - 如何在 Python 中创建设计矩阵?
- entity-framework-core - 实体框架:具有大量数据的缓慢迁移
- heroku - Heroku 应用程序已部署但无法运行,并且出现错误
- react-native - 如何在 React Native 中重新播放 Lottie 动画
- php - MySQL 字段看似随机更新
- javascript - 在 Tabulator 4.9 中使用 setColumns 函数时缺少格式化程序