在python中声明参数列表中的函数

时间:2016-04-23 11:54:59

标签: python

我正在寻找为曲线拟合建立一个通用对象,我在其中定义参数名称,值和边界。有时,我想使用传入的数据来帮助使用函数(min,max等)定义边界。

这是对象:

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)进行数学运算。

实施此行为的最佳方法是什么?如果有的话?

1 个答案:

答案 0 :(得分:0)

看起来您想要为现有函数创建包装器。例如,您有:

0.975*np.min

但这不起作用,因为它试图将函数乘以float倍。您可以使用以下方法内联创建新函数:

lambda data: 0.957*np.min(data)

这可能是您正在寻找的。它等同于定义命名函数:

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

然后使用myfunc。不同之处在于lambda语法创建了一个可以内联定义的匿名函数。