데이터를 fitting 할 일이 생겼다.
기존에는 gnuplot에 내장되어 있는
fitting method 를 사용하였는데,
gaussian function에 대해서는 solution이 initial guessing parameter에 대해서 매우 sensitive하고,
그 결과가 unstable해서 적절한 것 같지 않았다.
또한, fitting 할 set이 그 수가 많아서 gnuplot으로 하기엔 양이 많았다.
googling을 통해 찾아본 결과!
scipy 라는 scientific python module을 사용하면 쉽게 할 수 있다고 해서 이에 도저언~~~
1. SciPy Installation
http://www.scipy.org/Installing_SciPy/Linux
여기에 뭐라뭐라 나와있는데,
ubuntu에서는 정말 간단하다.
# sudo apt-get install python-scipy
혹시, numpy가 설치되어있지 않다면,
# sudo apt-get install python-numpy python-scipy
이걸로 끝!
2. Fitting data using scipy
http://www.scipy.org/Cookbook/FittingData
이 module은 친절하게 사용법을 하나하나 알려준다. :)
residual function, initial guessing parameter, data
이렇게 세 개의 요소만 있으면 fitting 완료!
단,
data가 numpy에서 사용하는 array형태 로 들어가야 한다. (여기서 삽질좀..;;)
#!/usr/bin/python
from numpy import *
from scipy.optimize import *
res = lambda p,x,y: y - (p[0]*x + p[1]) # Residual function
p0 = [1.0,0.0] # Initial guessing parameter
x = array([1,2,3])
y = array([1.1,1.8,2.7])
p1 = leastsq(res,p0,args=(x,y))
print p1[0]
>> [0.85 0.23333334]
크리에이티브 커먼즈 라이선스