[파이썬][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
함수를 사용하여 다차원 데이터를 보간하는 방법을 보여줍니다.