2014-10-20 14 views
0

所以我有這個lmfit代碼:如何處理生成的變量。不能傳遞給一個表達

fit_params = Parameters() 
for iy, y in enumerate(data): 
    fit_params.add('mean1_%i' % (iy+1), value=10.0, min=0.0, max=50.0) 
    fit_params.add('mean2_%i' % (iy+1), value=40.0, min=0.0, max=50.0) 
    fit_params.add('A1_%i' % (iy+1), value=28500.0, min=25000.0, max=33000.0) 
    fit_params.add('A2_%i' % (iy+1), value=28500.0, min=25000.0, max=33000.0) 
    fit_params.add('sd1_%i' % (iy+1), value=15.0, min=7.0, max=23.0) 
    fit_params.add('sd2_%i' % (iy+1), value=15.0, min=7.0, max=23.0) 
    fit_params.add('y0_%i' % (iy+1), value=1000.0, min=300.0, max=1500.0) 

for iy in range(2, data_sets+1): 
    #fit_params['mean2_%i' % iy].expr='mean2_1' 
    fit_params['sd1_%i' % iy].expr='???' 

這些參數實時生成。我想爲每個sd1_n和sd2_n添加一個表達式,sd1 < sd2。我的變量有

...%i' % iy 

部分,我不知道如何處理它們。如果變量werent生成,我只能輸入:

fit_params['sd1_1'].expr='sd1_1<sd2_1' 

任何幫助如何處理生成的變量並傳遞它們會很好。 文件隻字未提它http://cars9.uchicago.edu/software/python/lmfit/constraints.html

+0

迭代通過fit_params直到你找到符合你的標準,然後添加表達式給它的參數。匹配不應該太難,看起來你可以對前三個字符使用切片 - '''key [:3] =='sd1_'''' – wwii 2014-10-20 10:29:57

回答

1

怎麼樣像這樣爲你的範圍內循環:

for p in fit_params: 
    if p.startswith("sd1"): 
     idx = p.split("_")[1] 
     fit_params[p].expr="sd1_{0}<sd2_{0}".format(idx) 
相關問題