【发布时间】:2013-03-14 23:34:25
【问题描述】:
我有一个 python 代码,它产生一个由数字 x、y 和 z 组成的三元组列表。我想使用 scipy curve_fit 拟合 z= f(x,y)。这是一些无效的代码
A = [(19,20,24), (10,40,28), (10,50,31)]
def func(x,y,a, b):
return x*y*a + b
如何让 python 使这个函数适合列表A 中的数据?
【问题讨论】:
我有一个 python 代码,它产生一个由数字 x、y 和 z 组成的三元组列表。我想使用 scipy curve_fit 拟合 z= f(x,y)。这是一些无效的代码
A = [(19,20,24), (10,40,28), (10,50,31)]
def func(x,y,a, b):
return x*y*a + b
如何让 python 使这个函数适合列表A 中的数据?
【问题讨论】:
func 的第一个参数必须是数据(x 和 y)。func 的其余参数表示参数。所以你需要稍微修改一下你的func:
def func(data, a, b):
return data[:,0]*data[:,1]*a + b
curve_fit 的第一个参数是函数。data(x和y在
一个数组的形式)。z)。a
在这种情况下是b。)所以,例如:
params, pcov = optimize.curve_fit(func, A[:,:2], A[:,2], guess)
import scipy.optimize as optimize
import numpy as np
A = np.array([(19,20,24), (10,40,28), (10,50,31)])
def func(data, a, b):
return data[:,0]*data[:,1]*a + b
guess = (1,1)
params, pcov = optimize.curve_fit(func, A[:,:2], A[:,2], guess)
print(params)
# [ 0.04919355 6.67741935]
【讨论】: