如何从复合模型对象中动态移除模型?
问题:如何移除复合拟合模型中的组件?
我正在编写一个自动推导光谱数据中峰的数量并拟合的脚本,流程如下:
- 先对数据的最高点进行洛伦兹拟合,计算残差
- 随后在残差中寻找连续的最高点继续拟合
- 每次迭代时,对比当前的LnL与上一次迭代的LnL,以此判断新增模型是否有价值
目前遇到的核心问题是:将模型添加到复合模型后,无法将其移除。我必须先添加模型才能判断LnL是否有所提升,不能提前跳过这一步。另外,我试过find_peaks寻峰,但它过于依赖手动输入和调整prominence等参数,效果不佳。之前尝试过多种带del的循环,只能删除参数,无法移除模型本身。
已解决:重新构建复合模型
通过过滤掉目标组件并重新创建复合模型的方式,解决了这个问题。代码如下:
# 过滤掉要移除的组件(globals()[f"gauss{CI}"]是动态创建的变量,若为手动创建的变量直接使用变量名即可) new_components = [model for model in gaussi.components if model != (globals()[f"gauss{CI}"])] print("BEGONE...!") # 重新构建不含目标组件的复合模型 new_composite_model = new_components[0] for model in new_components[1:]: new_composite_model += model gaussi = new_composite_model
内容的提问来源于stack exchange,提问作者Thomas Banks
相关产品推荐
相关产品推荐

