[파이썬][Scipy] Interpolation 함수 예제

scipy.interpolate 모듈은 데이터의 보간과 스플라인 근사를 수행하는데 사용됩니다. 아래 예제에서는 scipy.interpolate 모듈을 사용하여 1차원 데이터와 2차원 데이터를 보간하는 방법을 보여줍니다.

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

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

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차원 데이터에 대한 보간을 수행하고 결과를 시각화하는 방법을 살펴보겠습니다.

# 원본 데이터 생성
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차원 그리드 생성
x_new = np.linspace(0, 4, 25)
y_new = np.linspace(0, 4, 25)
X_new, Y_new = np.meshgrid(x_new, y_new)

# 2차원 데이터 보간 (griddata 함수 사용)
Z_interpolated = griddata((X.flatten(), Y.flatten()), Z.flatten(), (X_new, Y_new), method='cubic')

# 결과 시각화
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_interpolated, extent=(x_new.min(), x_new.max(), y_new.min(), y_new.max()), origin='lower', cmap='viridis')
plt.title('2D Interpolation')
plt.xlabel('x')
plt.ylabel('y')

plt.tight_layout()
plt.show()

위의 예제에서는 1차원 및 2차원 데이터에 대한 보간을 수행하고 결과를 시각화합니다. scipy.interpolate 모듈을 사용하면 데이터를 부드럽게 보간하고 근사화하는데 유용합니다.