2012-08-31 54 views
23

在python中,我有一个具有许多参数的函数。我想将这个函数适用于数据集,但只使用一个参数,我想自己提供的其余参数。这里有一个例子:仅适用于python中具有许多参数的函数的一个参数

def func(x,a,b): 
    return a*x*x + b 

for b in xrange(10): 
    popt,pcov = curve_fit(func,x1,x2) 

在此我想的是,配件只为a完成,参数b采取循环变量的值。如何才能做到这一点?

+0

你应该看看http://en.wikipedia.org/wiki/Curve_fitting – ninjagecko

+0

有无限的方式来定义“适合”曲线的含义,并且对于每种方法,有许多方法来实现它。您想要的曲线拟合类型通常取决于您尝试解决的问题。假设你不在意,一种简单的方法称为最小二乘法,它将误差的平方和减至最小。这是一个预先制作的图书馆,用于计算“阻尼”最小二乘法的解决方案:http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html问题虽然不完整,我建议关闭并重新打开关于曲线拟合的具体问题。 – ninjagecko

+5

我不关心算法,我只是使用scipy.optimize中的curve_fit。我无法理解的是我应该在哪里指定其中一个参数应该取我的值以及它适合哪个参数? – lovespeed

回答

31

可以在一个lambda包裹func,如下所示:

def func(x,a,b): 
    return a*x*x + b 

for b in xrange(10): 
    popt,pcov = curve_fit(lambda x, a: func(x, a, b), x1, x2) 

一个lambda是匿名函数,其在Python只能用于简单的一条线的功能。基本上,它通常用于在不需要为函数分配名称时减少代码量。在官方文档中给出了更详细的描述:http://docs.python.org/tutorial/controlflow.html#lambda-forms

在这种情况下,lambda用于修复func的参数之一。新创建的函数只接受两个参数:xa,而b固定为从本地b变量中获取的值。这个新函数然后作为参数传入curve_fit

+0

您能否详细说明一下?什么是lambda? – lovespeed

+0

我在答案中添加了更多细节。 –

0

如果您愿意/能够编辑原始功能,则有一个更简单的选项。

重新定义你的函数为:

​​

然后,你可以简单地把它放在您的环路参数b:

for b in xrange(10): 
    popt,pcov = curve_fit(func, x1, x2) 

警告:该功能需要在同一个脚本来定义,其中它被称为这个工作。