我如何找出lambda函数需要多少个参数

时间:2012-06-28 18:17:10

标签: python numpy scipy least-squares

我正在尝试创建一个基于传入的lambda函数进行最小二乘拟合的函数。我想创建一个长度为零的数组,该数组的长度等于lambda函数对lambda函数的初始猜测所采用的参数数量。所以如果它的线性我想要[0,0]而对于二次我想要[0,0,0]。

#polynomial functions
linear = lambda p, x: p[0] * x + p[1]
quadratic = lambda p, x: p[0] * x**2 + p[1] * x + p[2]
cubic = lambda p, x: p[0] * x**3 + p[1] * x**2 + p[2] * x + p[3]

#polynomial functions forced through 0
linear_zero = lambda p, x: p[0] * x 
quadratic_zero = lambda p, x: p[0] * x**2 + p[1] * x 
cubic_zero = lambda p, x: p[0] * x**3 + p[1] * x**2 + p[2] * x

def linFit(x, y,fitfunc):
    errfunc = lambda p, x, y: fitfunc(p, x) - y     

这里我要创建一个零数组。但此时p未定义。所以len(p)不起作用。

    init_p = np.array(zeros(len(p)))  #bundle initial values in initial parameters

    p1, success = optimize.leastsq(errfunc, init_p.copy(), args = (x, y))
    return p1   

2 个答案:

答案 0 :(得分:7)

在python> = 2.7:

>>> l = lambda a, b: None
>>> l.func_code.co_argcount
2

或2.6以下:

>>> l.__code__.co_argcount
2

答案 1 :(得分:2)

通过查看它的代码对象__code__

>>> p=lambda x,y:x+y
>>> len(p.__code__.co_varnames)
2
>>> p.__code__.co_varnames
('x', 'y')