三维点拟合 Python

8 投票
1 回答
28969 浏览
提问于 2025-04-17 19:06

我有一段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的第一个参数是你要用的函数。
  • 第二个参数是独立的数据,也就是xy,它们要放在一个数组里。
  • 第三个参数是依赖的数据,也就是z
  • 第四个参数是对参数值的一个初步猜测,这里是ab

比如说:

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]

撰写回答