我想要定義一個n變量的函數來適合數據集。該功能看起來像這樣。以數組爲參數的Python lambda函數
我再要找到最佳的艾未未和BJ的適合我的數據使用scipy.optimize.leastsq
在此處設置是到目前爲止我的代碼。
from scipy.optimize import leastsq
import numpy as np
def kellyFunc(a, b, x): #Function to fit.
top = 0
bot = 0
a = [a]
b = [b]
for i in range(len(a)):
top = top + a[i]*x**(2*i)
bot = bot + b[i]*x**(2*i)
return(top/bot)
def fitKelly(x, y, n):
line = lambda params, x : kellyFunc(params[0,:], params[1,:], x) #Lambda Function to minimize
error = lambda params, x, y : line(params, x) - y #Kelly - dataset
paramsInit = [[1 for x in range(n)] for y in range(2)] #define all ai and bi = 1 for initial guess
paramsFin, success = leastsq(error, paramsInit, args = (x,y)) #run leastsq optimization
#line of best fit
xx = np.linspace(x.min(), x.max(), 100)
yy = line(paramsFin, xx)
return(paramsFin, xx, yy)
在它給我的錯誤的時刻:
「IndexError:太多的指標」,因爲我已經定義了我最初的lambda函數使用參數[0 ,:],而params [1的方式,: ]。
你想用'params [0,:]'和'params [1,:]'做什麼?這看起來不像有效的Python列表切片語法。 – Ben
實際上,這是有效的Python。關鍵是一個元組,元組的第二個元素是一個片。它被NumPy廣泛使用。 – kindall
我站好了!感謝您的澄清。 – Ben