【问题标题】:Parameter hint assignment through a function in LMFIT通过 LMFIT 中的函数分配参数提示
【发布时间】:2016-03-11 19:41:12
【问题描述】:

我想为字典中保存的模型设置参数提示。我创建了一个用于设置提示的函数。首先,创建一个主模型,然后我想创建不同的模型,与主模型相同,但前缀不同。 set_hints 函数接受一个参数 comp,该参数定义了将设置的提示。这是我的代码的简化部分:

import lmfit

def foo (x, a):
    return x + a

def set_hints(mod, comp="2"):
    mod.set_param_hint("a", value=1, vary=True)

    if comp == "2":
        mod.set_param_hint("a", value=0, vary=False)

    return mod.param_hints

m = lmfit.Model(foo)
models = {}

for i in range(2):
    hints = set_hints(m, comp="2")

    models["m%i" % i] = lmfit.Model(m.func, m.independent_vars,
                                        prefix="m%i" %i,
                                        param_names=m.param_names)

for par in m.param_names:
    models["m%i" % i].param_hints[par] = hints[par]       
#    models["m%i" % i].param_hints = hints

for key in models.keys():
    print key
    print "value:"
    print models[key].param_hints["a"]["value"]
    print "vary:"
    print models[key].param_hints["a"]["vary"]

哪个输出:

 m0
value:
1
vary:
True
m1
value:
0
vary:
False

这对我来说没有任何意义!在这两种情况下,值和变化提示应分别为 0 和 False。就像在循环的第二次迭代中,set_hints 函数的条件 comp == "2" 对于循环的第一次迭代不满足,并且提示被追溯更改!如果我取消注释注释行并且不迭代设置提示,则结果很好。但是现在发生的事情我觉得完全荒谬。请帮助我了解发生了什么!

【问题讨论】:

    标签: python parameters hints lmfit


    【解决方案1】:

    代码看起来很奇怪,但我认为它来自更大的设计。我认为这一定是一个错误,尽管我不确定那是什么。我将在 lmfit github 网站上创建一个问题。

    【讨论】:

    • 谢谢您的评论,确实代码看起来很奇怪,因为我制作了整个代码的简化版本。我制作了一个全局拟合脚本,该脚本将不同数量的衰减分量拟合到瞬态光谱数据。这就是为什么我需要一个关键字来根据组件的数量设置参数提示。该代码现在可以正常工作(使用上面的注释行时)并且结果很好。只是这个问题困扰了我两天。
    • 顺便说一句,我检查了您在 github 上提出的问题。感谢您简化我的代码。在发布之前我已经厌倦了想一个更简单的版本:)
    • 我相信这个问题现在已经在 github 上最新的 master 分支中修复了。
    • 很高兴听到这个消息。谢谢。顺便说一句,LMFIT 包做得很好!
    猜你喜欢
    • 1970-01-01
    • 2020-08-31
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多