Python,曲线拟合

时间:2019-11-15 09:15:14

标签: python list recursion curve-fitting

我想拟合一系列高斯函数,以前我不知道这些函数需要多少。这是我目前的解决方案。

g_used=false c_used=false n_used=false
while .....
   g) g_used=true; ...
   c) c_used=true; ...
   n) n_used=true; ...
....

# something like that
if "$g_used"; then
    if ! "$c_used" || ! "$n_used"; then
      echo "ERROR: -g option was used, but -c or -n option was not used"
    fi
fi

# ex. move the execution of actions after the option parsing
if "$c_used"; then
    prune_containers
fi
if "$n_used"; then
    prune_networks
fi

我知道有关位置,std和最大值的信息。因此,即使在许多高斯函数的情况下,拟合也会收敛。但是,我需要曲线拟合才能将列表或元组传递给函数。启动时,它会自动将其置于许多单个参数中:

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]])

当我将p0作为元组而不是列表传递时,会发生相同的效果。

有没有办法绕过这个问题?如果是,怎么办?

这是解决方案:

TypeError: gauss_recursive() takes 4 positional arguments but 10 were given

0 个答案:

没有答案