【问题标题】:how do I find out how many arguments a lambda function needs如何找出一个 lambda 函数需要多少个参数
【发布时间】:2012-06-28 18:17:10
【问题描述】:

我正在尝试创建一个函数,该函数将根据传入的 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   

【问题讨论】:

标签: python numpy scipy least-squares


【解决方案1】:

python下>= 2.7:

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

或低于 2.6:

>>> l.__code__.co_argcount
2

【讨论】:

  • 嗯。我想另一个问题是我使用数组作为我的论点之一。因此,这将为我的所有 lambda 函数返回 2,因为该数组仅计为 1 个参数
  • @richmb - 听起来像是设计问题。
  • 我通过在函数声明中使用 touples 解决了这个问题。添加了一个长度参数。
【解决方案2】:

通过查看它的代码对象__code__:

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

【讨论】:

    猜你喜欢
    • 2012-06-25
    • 2014-08-30
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多