我有一段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
:
def func(data, a, b):
return data[:,0]*data[:,1]*a + b
curve_fit
的第一个参数是函数。例如:
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]