三维点拟合 Python
我有一段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
中的数据上呢?
1 个回答
17
- 你传给
func
的第一个参数必须是数据,也就是x和y。 - 后面的参数就是一些设置的选项。
所以你需要稍微调整一下你的func
:
def func(data, a, b):
return data[:,0]*data[:,1]*a + b
curve_fit
的第一个参数是你要用的函数。- 第二个参数是独立的数据,也就是
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]