Python SciPy 기초
SciPy 라이브러리 (데이터처리용)
수학, 통계를 포함한 과학기술계산용 함수 및 알고리즘을 제공하는 파이썬 모듈
-
curve_fit 사용법
# scipy.optimize.curve_fit(f,x,y, ....) # (x,y) 데이터를 비선형 최소제곱법(non-linear least squres method)을 이용하여 특정함수를 적합화 하는 메서드 # 모델 : y = f(x,*모수) + 오차 # 여기서 함수 f의 첫 번때 인자는 x 데이터 값(array 또는 객체) # 리턴값은 모수의 추정값 # 추정값의 공분산 행렬(Jacobian matirx), 모수의 표준오차 : np.squrt(np.diag(pcov)) # 가상 자료를 만드는 과정 import numpy as np np.random.seed(123457) x_data = np.linspace(-5,5,num=50) y_data = 2.9 * np.sin(1.5 * x_data) + np.random.normal(size=50) import scipy.optimize as opt def test_func(x,a,b): # 분석모델 결정 return a*np.sin(b*x) params, params_covariance = opt.curve_fit(test_func,x_data,y_data)
-
minimize 사용법
# f(x)의 최소값을 찾는 문제: x가 -1.3에 최소값 , 3.8에 최소값 같이 보이는 Local Minimum이 있다. import scipy.optimize as opt def f(x): return x**2 + 10*np.sin(x) x = np.arange(-10,10,0.1) plt.plot(x,f(x)) plt.show() result = opt.minimize(f,x0=0)
-
root 사용법
# f(x) = 0을 만족하는 근(root)을 구하는 문제 import scipy.optimize as opt def f(x): return x**2 + 10*np.sin(x) def zero_f(x): return x*0 x = np.arange(-10,10,0.1) plt.plot(x,f(x) ,label='f(x)') plt.plot(x,zero_f(x),label='f(x)=0') plt.legend(loc='best') plt.show()
-
Stats 사용법
# 표준정규분포의 이론적 밀도함수 vs 100개의 랜덤 데이터의 경험적 밀도 import numpy as np import scipy.stats as stat import matplotlib.pyplot as plt samples = np.random.normal(size=100) # 표준 정규분포로 부터 100개의 랜덤 넘버 생성 bins = np.arange(-3,4) # -3~3까지 bin 생성 , X의 확률 변수 범위 density = np.histogram(samples, bins=bins, density=True)[0] # 도수, 구분 = np.histogram(data, 도수분포구간 (bin)) # plt.hist(samples, bins) 히스토그램 x = 0.5*(bins[1:]+bins[:-1]) # 이산변수를 연속변수를 바꾸기 위한 보정 pdf = stat.norm.pdf(x) # 정규분포 plt.plot(x, density, label='sample') plt.plot(x, pdf, label='normal') plt.legend(loc='best') plt.show()
# 독립된 두 표본의 평균 검정을 위한 t-test a = np.random.normal(0,1,size=100) b = np.random.normal(1,1,size=10) stat.ttest_ind(a,b)
- integrate 사용법
- 적분 문제 : $\int_{0}^{\pi /2}sin(x) dx$
import numpy as np from scipy.integrate import quad quad(np.sin, 0, np.pi/2)
- 적분 문제 : $\int_{0}^{\pi /2}sin(x) dx$
- integrating Ordinary Differential Equations (ODE)
-
미분방정식문제 : $\frac{\mathrm{d} y}{\mathrm{d} x} = -2y \quad with \quad y(x=0)=1 , \quad for \, 0 \leq X \leq 4$
import numpy as np from scipy.integrate import odeint from matplotlib import pyplot as plt def f_prime(y,x): #미분방정식에 사용할 함수 정의 return -2*y x = np.linspace(0,4,40) y = odeint(f_prime, 1, x) # 미분 방정식의 적분을 통한 함수 값 리턴 plt.figure(figsize=(4,3)) plt.plot(x,y) plt.xlabel('x:Time') plt.ylabel('y:Position') plt.tight_layout()
댓글남기기