Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fitting 3D points python

Tags:

python

scipy

I have python code that produces a list of 3-tuples of numbers x, y and z. I would like to fit z= f(x,y) using scipy curve_fit. Here is some non-working code

A = [(19,20,24), (10,40,28), (10,50,31)]

def func(x,y,a, b):
    return x*y*a + b

How can I get python to fit this function to the data in the list A?

like image 358
graffe Avatar asked Mar 14 '13 15:03

graffe


1 Answers

  • The first argument to func must be the data (both x and y).
  • The rest of the arguments to func represent the parameters.

So you need to modify your func a bit:

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

  • The first argument to curve_fit is the function.
  • The second argument is the independent data (x and y in the form of one array).
  • The third argument is the dependent data (z).
  • The fourth argument is a guess for the value of the parameters (a and b in this case.)

So, for example:

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]
like image 140
unutbu Avatar answered Sep 24 '22 01:09

unutbu