通过LMFIT

时间:2016-03-11 19:41:12

标签: python parameters hints lmfit

我想为字典中保存的模型设置参数提示。我创建了一个函数,用于设置提示。首先,创建一个主要模型然后我想创建不同的模型,与主要模型相同,但具有不同的前缀。 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”不满足循环的第一次迭代,并且提示会被追溯更改!如果我取消注释注释行并且不迭代地设置提示,结果是好的。但现在发生的事情我发现它完全荒谬。请帮我理解发生了什么!

1 个答案:

答案 0 :(得分:0)

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