2016-04-23 15 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)) 

私は私の下限、および1.025として、私の推測として0.975 * np.min(データを)np.min(データ)を使用しようとしています* 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 
           ) 

は、私は次のエラーを取得する:機能0.975*np.minはなく0.975*np.min(data)に数学をやろうとしていますので、理にかなってTypeError: unsupported operand type(s) for *: 'float' and 'function'

この動作を実装する最も良い方法は何ですか?もしあれば?

答えて

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