多个 symfit 模型实例共享同名的参数对象。我想了解这种行为来自哪里,它的意图是什么以及是否可以停用。
为了说明我的意思,一个最小的例子:
import symfit as sf
# Create Parameters and Variables
a = sf.Parameter('a',value=0)
b = sf.Parameter('b',value=1,fixed=True)
x, y = sf.variables('x, y')
# Instanciate two models
model1=sf.Model({y:a*x+b})
model2=sf.Model({y:a*x+b})
# They are indeed not the same
id(model1) == id(model2)
>>False
# There are two parameters
print(model1.params)
>>[a,b]
print(model1.params[1].name, model1.params[1].value)
>>b 1
print(model2.params[1].name, model2.params[1].value)
>>b 1
#They are initially identical
# We want to manually modify the fixed one in only one model
model1.params[1].value = 3
# Both have changed
print(model1.params[1].name, model1.params[1].value)
>>b 3
print(model2.params[1].name, model2.params[1].value)
>>b 3
id(model1.params[1]) == id(model2.params[1])
>>True
# The parameter is the same object
我想用不同的模型拟合多个数据流,但不同的固定参数值取决于数据流。重命名模型的每个实例中的参数是可行的,但考虑到参数代表相同的数量,这很难看。按顺序处理它们并修改它们之间的参数是可能的,但我担心步骤之间的意外交互。
PS:有足够声誉的人可以创建symfit标签吗