7

我有 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

4

1 回答 1

14
  • 第一个参数func必须是数据(x 和 y)。
  • 其余的参数来func表示参数。

所以你需要修改你func的一点:

def func(data, a, b):
    return data[:,0]*data[:,1]*a + b

  • 第一个参数curve_fit是函数。
  • 第二个参数是独立的datax并且y以一个数组的形式)。
  • 第三个参数是相关数据(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]
于 2013-03-14T15:29:20.963 回答