2017년 12월 5일 화요일

Interpolation in Python

scipy는 간단한 단일변수(univariate)부터 복잡한 복수변수(multivariate)를 망라하는 보간법 함수를 15개 이상 제공한다.

1. 단일 변수

보간법은 두 가지의 기본적인 방법을 사용한다.
(1) 전체 데이터 집합에 단일 함수 적용하는 방법
(2) 여러 개의 함수를 각기 다른 데이터 집합에 적용하는 방법 (스플라인 보간법)

import numpy as np
from scipy.interpolate import interp1d

x = np.linspace(0, 10*np.pi, 20)
y = np.cos(x)

fl = interp1d(x, y, kind = 'linear')
fq = interp1d(x, y, kind = 'quadratic')

xint = np.linspace(x.min(), x.max(), 1000)
yintl = fl(xint)
yintq = fq(xint)

노이즈가 포함된 데이터의 보간법

from scipy.interpolate import UnivariateSpline

sample = 30
x = np.linspace(1, 10*np.pi, sample)
y = np.cos(x) + np.log10(x) + np.random.randn(sample)/10

f = UnivariateSpline(x, y, s=1)

xint = np.linspace(x.min(), x.max(), 1000)
yint = f(xint)

2. 복수 변수

영상 복구에 사용되기도 한다.

from scipy.interpolate import griddata
from scipy.interpolate import SmoothBivrateSpline as SBS

영상에 두 가지 방법을 각각 적용하여 결과를 비교하면 SmoothBivrateSpline이 더 잘 동작하는 것처럼 보일때가 있는데, 코드를 여러번 실행해 비교해 보길 바란다. SmoothBivrateSpline은 표본에 민감해 보간법을 적용한 결과가 이상한 경우도 있다. griddata는 좀 더 안정적이어서 표본 선택과 관계없이 타당한 결과를 얻을 수 있다.


출처: <데이터/수치 분석을 위한 파이썬 라이브러리  SciPy와 NumPy (한빛미디어)>

댓글 없음:

댓글 쓰기

람다 표현식 (Lambda expression)

람다 표현식(Lambda expression)  람다 표현식으로 함수를 정의하고, 이를 변수에 할당하여 변수를 함수처럼 사용한다. (1) 람다 표현식       lambda <매개변수> : 수식      ※ 람다식을 실행하...