[파이썬][Scipy] scipy.interpolate 예제

scipy.interpolate 모듈은 데이터의 보간(interpolation) 및 스플라인 근사(spline approximation)와 관련된 기능을 제공합니다. 아래 예제에서는 scipy.interpolate 모듈을 사용하여 데이터를 보간하고 스플라인 근사를 수행하는 방법을 보여줍니다.

먼저, 필요한 모듈을 가져옵니다:

mport numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d

예제 1: 1차원 데이터 보간

이 예제에서는 1차원 데이터를 보간하여 더 많은 데이터 포인트를 생성합니다.

# 원본 데이터 생성
x = np.linspace(0, 10, num=11)
y = np.sin(x)

# 보간 함수 생성 (선형 보간)
f_linear = interp1d(x, y, kind='linear')

# 새로운 데이터 포인트 생성
x_new = np.linspace(0, 10, num=101)
y_linear = f_linear(x_new)

# 결과 시각화
plt.figure(figsize=(8, 6))
plt.plot(x, y, 'o', label='Original Data')
plt.plot(x_new, y_linear, '-', label='Linear Interpolation')
plt.title('1D Linear Interpolation')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True)
plt.show()

이 코드는 원본 데이터를 선형 보간하여 새로운 데이터 포인트를 생성하고, 결과를 시각화합니다.

예제 2: 2차원 스플라인 근사

이 예제에서는 2차원 데이터에 대한 스플라인 근사를 수행합니다.

# 원본 데이터 생성
x = np.linspace(0, 4, 5)
y = np.linspace(0, 4, 5)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))

# 2차원 스플라인 근사
f_spline = interp2d(x, y, Z, kind='cubic')

# 새로운 데이터 포인트 생성
x_new = np.linspace(0, 4, 25)
y_new = np.linspace(0, 4, 25)
Z_spline = f_spline(x_new, y_new)

# 결과 시각화
plt.figure(figsize=(10, 8))
plt.subplot(121)
plt.imshow(Z, extent=(x.min(), x.max(), y.min(), y.max()), origin='lower', cmap='viridis')
plt.title('Original Data')
plt.xlabel('x')
plt.ylabel('y')

plt.subplot(122)
plt.imshow(Z_spline, extent=(x_new.min(), x_new.max(), y_new.min(), y_new.max()), origin='lower', cmap='viridis')
plt.title('2D Spline Approximation')
plt.xlabel('x')
plt.ylabel('y')

plt.tight_layout()
plt.show()

이 코드는 2차원 데이터에 대한 스플라인 근사를 수행하고, 원본 데이터와 근사 결과를 시각화합니다.

scipy.interpolate 모듈은 데이터를 부드럽게 보간하고 근사화하는데 유용한 도구를 제공합니다. 위의 예제는 1차원 및 2차원 데이터에 대한 간단한 보간 및 근사화를 보여줍니다.