반응형
** 지난포스팅 참고:
https://hexa-coding.tistory.com/55
지난 포스팅에 이어 1차 보간으로 여러 개의 함수를 동시에 보간 진행하는 법을 알아보자.
방법은 지난 1차 보간을 할 때와 거의 유사하고 매우 쉽다!
1. 측정 데이터 준비
측정 데이터가 아래와 같이 판다스 형태로 제공되었다고 치자.
테이블에는 각 x값에 대해 y1, y2, y3 세 가지 측정 결과들이 있다.
이 결과들을 한 번에 보간해버릴 것이다.
일단 위 데이터프레임은 아래와 같이 얻었다.
반응형
# 측정데이터 준비
x = np.array([-100.0, -89.47368421052632, -78.94736842105263,
-68.42105263157895, -57.89473684210526, -47.368421052631575,
-36.84210526315789, -26.315789473684205, -15.78947368421052,
-5.263157894736835, 5.26315789473685, 15.789473684210535,
26.31578947368422, 36.84210526315792, 47.36842105263159,
57.89473684210526, 68.42105263157896, 78.94736842105266,
89.47368421052633, 100.0])
# 실측값 y1, y2, y3 (각 열)
Y = np.array([[ -11999. , -151340. , -20200. ],
[ -10004.5401662 , -123427.53462604, -13906.37119114],
[ -8231.68698061, -98174.34903047, -8499.16897507],
[ -6680.44044321, -75580.4432133 , -3978.3933518 ],
[ -5350.80055402, -55645.81717452, -344.04432133],
[ -4242.76731302, -38370.47091413, 2403.87811634],
[ -3356.34072022, -23754.40443213, 4265.37396122],
[ -2691.52077562, -11797.61772853, 5240.4432133 ],
[ -2248.30747922, -2500.11080332, 5329.08587258],
[ -2026.70083102, 4138.11634349, 4531.30193906],
[ -2026.70083102, 8117.06371191, 2847.09141274],
[ -2248.30747922, 9436.73130194, 276.45429363],
[ -2691.52077562, 8097.11911357, -3180.60941828],
[ -3356.34072022, 4098.22714681, -7524.09972299],
[ -4242.76731302, -2559.94459834, -12754.0166205 ],
[ -5350.80055402, -11877.39612188, -18870.3601108 ],
[ -6680.44044321, -23854.12742382, -25873.13019391],
[ -8231.68698061, -38490.13850416, -33762.32686981],
[ -10004.5401662 , -55785.42936288, -42537.9501385 ],
[ -11999. , -75740. , -52200. ]])
# 측정값 데이터프레임
df = pd.DataFrame(Y, columns=['y1','y2','y3'], index=x)
이제 보간을 진행하기 위해 x와 Y를 정의한다. x는 df의 인덱스 값이고, Y는 df의 각 열에 해당하는 데이터이다. interp1d를 이용해 보간을 바로 진행하면 된다. new_Y는 y1, y2, y3를 각 열로 가지는 넘파이 배열이다.
# y1, y2, y3 동시 보간 진행
x = df.index
Y = df
interp_functions = interp1d(x,Y, axis=0, kind='quadratic')
# 데이터 플로팅을 위한 new_x
new_x = np.linspace(-100,100,200) # 간격을 기존보다 10배 촘촘하게 했다. (20->200)
new_Y = interp_functions(new_x) # new_x에 맞게 new_Y값을 뽑아준다.
보간이 잘 되었는지 원본 측정데이터(y1,y2,y3)와 보간된 데이터 (new_Y)를 각각 플로팅 해 보자.
# 실측 데이터 y1, y2, y3 플롯
plt.scatter(x,df.y1, label="y=f1(x)")
plt.scatter(x,df.y2, label="y=f2(x)")
plt.scatter(x,df.y3, label="y=f3(x)")
# 보간 데이터 new_Y 플롯
plt.plot(new_x,new_Y, label=['interp_f1(x)','interp_f2(x)','interp_f3(x)'])
plt.ylim(-30000,20000)
plt.legend()
ax = plt.gca()
plt.text(x=0.5,y=0.2,s="Interpolation of f1,f2,f3", fontdict={'fontsize':20, 'fontweight':'bold'}, ha='center', transform=ax.transAxes)
보간이 잘 된 것 같다. ㅎㅎ
반응형
'데이터 피팅 & 보간' 카테고리의 다른 글
파이썬 1차원 보간법 완벽정리!! - 측정 데이터 보간 (0) | 2024.01.12 |
---|---|
파이썬 2차 보간법 완벽 예제!! - 면 보간, 면 피팅, interp2d, bisplrep (2) | 2023.05.14 |