【发布时间】:2017-05-04 00:51:27
【问题描述】:
我正在尝试定义一个包含 n 个变量的函数以适应数据集。函数如下所示。
然后我想使用 scipy.optimize.leastsq 找到适合我的数据集的最佳 ai 和 bj
这是我目前的代码。
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: too many indices”,因为我用 params[0,:] 和 params[1,:] 定义了我的初始 lambda 函数。
【问题讨论】:
-
你想用
params[0,:]和params[1,:]做什么?这看起来不像是有效的 Python 列表切片语法。 -
实际上是有效的 Python。键是元组,元组的第二个元素是切片。 NumPy 广泛使用它。
-
我的立场是正确的!感谢您的澄清。
-
您是否尝试重新定义 lambda?
-
抱歉,二战我不知道你说的重新定义 lambda 是什么意思..?
标签: python lambda curve-fitting least-squares