2012-08-31 52 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) 

警告:該功能需要在同一個腳本來定義,其中它被稱爲這個工作。

相關問題