python

2016-04-23 64 views
0

聲明一個函數參數列表我正在尋找建立一個通用對象的曲線擬合,其中我定義的參數名稱,值和界限。有時,我想使用傳入數據來幫助使用函數(最小值,最大值等)來定義邊界。python

這裏是對象:

class CurveFitObject(object): 
    def __init__(self,paramList,growthEquation): 
     self.paramList = paramList 
     self.gmod = Model(growthEquation) 

    def calcCurveFit(data): 
    for param in self.paramList: 
      self.gmod.set_param_hint(self.paramList['name'], 
            value=self.paramList['value'](data), 
            min=self.paramList['min'](data), 
            max=self.paramList['max'](data)) 

在這裏,我試圖用np.min(數據)作爲我的猜測,0.975 * np.min(數據)作爲我的下邊界,而1.025 * NP .min(數據)作爲我的上限。

def growthEquation(self, t, A): return A 
keys = ['name','guess','min','max','vary'] 
logisticGrowth = CurveFitObject(
           [dict(zip(keys,['A',np.min,0.975*np.min,1.025*np.min,True])), 
           growthEquation 
           ) 

我得到以下錯誤:TypeError: unsupported operand type(s) for *: 'float' and 'function' 這是有道理的,因爲它試圖做功能0.975*np.min而非0.975*np.min(data)數學。

實施此行爲的最佳方法是什麼?如果有的話?

回答

0

它看起來像你想創建一個現有的函數包裝。例如,您有:

0.975*np.min 

但是,這並不工作,因爲它試圖乘以float時間的函數。您可以使用以下內容在線創建新功能:

lambda data: 0.957*np.min(data) 

這可能是您要查找的內容。這相當於定義了一個命名函數:

def myfunc(data): 
    return 0.957*np.min(data) 

然後使用myfunc。區別在於lambda語法創建了一個可以內聯定義的匿名函數。

+0

完美地工作。謝謝。 – nven