[파이썬][Scipy] interp1d, interp2d, griddata 예제

Scipy의 interp1d, interp2d, 그리고 griddata 함수를 사용한 보간 예제를 제공하겠습니다.

interp1d 함수 예제:

interp1d 함수는 1차원 데이터를 보간하는 데 사용됩니다. 아래는 간단한 1차원 보간 예제입니다.

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

# 원본 데이터
x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 4, 9, 16])

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

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

# 보간 결과
y_new = f(x_new)

# 그래프 플로팅
plt.scatter(x, y, label='원본 데이터')
plt.plot(x_new, y_new, label='보간 결과', linestyle='--')
plt.legend()
plt.title('1차원 선형 보간')
plt.show()

interp2d 함수 예제:

interp2d 함수는 2차원 데이터를 보간하는 데 사용됩니다. 아래는 간단한 2차원 보간 예제입니다.

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

# 원본 데이터
x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 2, 3, 4])
z = np.array([[0, 1, 4, 9, 16],
              [1, 2, 5, 10, 17],
              [4, 5, 8, 13, 20],
              [9, 10, 13, 18, 25],
              [16, 17, 20, 25, 32]])

# 보간 함수 생성
f = interp2d(x, y, z, kind='linear')  # 선형 보간

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

# 보간 결과
z_new = f(x_new, y_new)

# 그래프 플로팅
plt.imshow(z, extent=(0, 4, 0, 4), origin='lower', cmap='viridis')
plt.colorbar(label='원본 데이터')
plt.title('2차원 선형 보간')
plt.show()

griddata 함수 예제:

griddata 함수는 임의의 2차원 데이터 포인트를 그리드 포인트로 보간하는 데 사용됩니다.

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

# 원본 데이터 포인트
x = np.random.rand(20)
y = np.random.rand(20)
z = np.sin(x * 2 * np.pi) + np.cos(y * 2 * np.pi)

# 그리드 생성
grid_x, grid_y = np.mgrid[0:1:100j, 0:1:100j]

# 데이터 보간
grid_z = griddata((x, y), z, (grid_x, grid_y), method='cubic')

# 그래프 플로팅
plt.imshow(grid_z.T, extent=(0, 1, 0, 1), origin='lower', cmap='viridis')
plt.colorbar(label='보간 데이터')
plt.title('2차원 보간')
plt.show()

위의 예제들은 Scipy의 interp1d, interp2d, 그리고 griddata 함수를 사용하여 다차원 데이터를 보간하는 방법을 보여줍니다.