2013-03-14 4 views
4

숫자 3, x, y 및 z의 튜플 목록을 생성하는 파이썬 코드가 있습니다. scipy curve_fit을 사용하여 z = f (x, y)에 맞추고 싶습니다. 여기3D 점 피팅 피팅

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

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

가 어떻게 파이썬 목록 A의 데이터에이 기능에 맞게 얻을 수있는 비 작업 코드는?

답변

8
  • func의 첫 번째 인수는 데이터 (x 및 y) 여야합니다.
  • func에 대한 나머지 인수는 매개 변수를 나타냅니다.

그래서 당신은 당신의 func 조금 수정해야합니다 curve_fit

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

  • 첫 번째 인수는 기능입니다.
  • 두 번째 인수는 data ( 형식의 배열 중 하나 인 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] 
+0

이 용액 x와 y가 같은 차원으로 특징 지워지는 경우에만 작동합니다. 다른 모양의 x, y에 대해이 코드를 일반화하는 방법은 무엇입니까? – TommasoF