首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python 3.X中通过使用运行中值来提高高斯/正常拟合?

如何在Python 3.X中通过使用运行中值来提高高斯/正常拟合?
EN

Stack Overflow用户
提问于 2018-06-13 04:47:27
回答 1查看 137关注 0票数 0

我有一个由100x100个数据点组成的数组,我试图对数组中每列的100个值执行高斯拟合。然后,我希望通过使用第一列的拟合找到的高斯参数作为下一列要使用的起始点的初始参数。假设我从初始参数1000、0和1开始,拟合得到值800、3和1.5。然后,我希望fitter使用这三个参数作为下一列的初始值。

我的代码是:

代码语言:javascript
复制
x = np.linspace(-50,50,100)
Gauss_Model = models.Gaussian1D(amplitude = 1000., mean = 0, stddev = 1.)
Fitting_Model = fitting.LevMarLSQFitter()

Fit_Data = []

for i in range(0, Data_Array.shape[0]):
    Fit_Data.append(Fitting_Model(Gauss_Model, x, Data_Array[:,i]))

现在,它对每个拟合都使用相同的初始值。有谁知道如何对高斯拟合方法执行这样的运行中位数/均值?非常感谢任何人的帮助或指引,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-06-13 08:46:15

我也不知道你使用的是什么库,如何做到这一点的细节可能取决于该库如何存储拟合值的细节。我可以说,对于lmfit (https://lmfit.github.io/lmfit-py/),我们在这种用法上遇到了困难,最终得到了一种设计,它让你想做的事情变得非常容易。使用lmfit,你可以把这个问题写成:

代码语言:javascript
复制
import numpy as np
from lmfit import GaussianModel

x = np.linspace(-50,50,100)
# get Data_Array from somewhere....

# create a model for a Gaussian
Gauss_Model = GaussianModel()

# make a set of parameters, setting initial values
params = Gauss_Model.make_params(amplitude=1000, center=0, sigma=1.0)

Fit_Results = []

for i in range(Data_Array.shape[1]):
    result = Gauss_Model.fit(Data_Array[:, i], params, x=x)
    Fit_Results.append(result)
    # update `params` with the current best fit params for the next column
    params = result.params

请注意,这之所以有效,是因为result.params小心地确保Model.fit()不会改变输入参数,并将每个fit的最佳拟合参数放入lmfit。

如果您决定让所有列都使用原始初始值,只需注释掉最后一个params = result.params即可。

Lmfit有很多花哨的东西,但我希望它能帮助你做你需要的事情。

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

https://stackoverflow.com/questions/50825618

复制
相关文章

相似问题

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