我想为字典中保存的模型设置参数提示。我创建了一个函数,用于设置提示。首先,创建一个主模型,然后我想创建不同的模型,与主模型相同,但前缀不同。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",并且提示被追溯更改!如果我取消注释注释行并且不迭代设置提示,则结果很好。但是现在发生的事情我觉得完全荒谬。请帮助我了解正在发生的事情!
代码看起来很奇怪,但我认为它来自更大的设计。 我认为这一定是一个错误,尽管我不确定那是什么。 我将在 lmfit github 站点上创建一个问题。