Pythonで滑らかな曲線を描く(補間法)
2564 ワード
必要なライブラリの実装
numpy、scipy、matplotlib
必要な方法の実装
補間 nearest:最近接補間法 zero:階段補間 slinear:線形補間 quadratic、cubic:2、3次Bスプライン補間 フィットと補間の違い
簡単に言えば、補間は既存のデータに基づいて埋め込まれ、最後に生成された曲線は必ず既存の点を通過する.
フィットは、既存のデータによって曲線係数を調整し、曲線と既知の点セットの差(最小二乗)を最小にし、最後に生成された曲線が必ずしも既存の点を通過するとは限らない.
コード実装
注意事項 x,yは元のデータ(少量) xnewは配列であり、条件:x 例えば、xの最小値は-2.931であり、最大値は10.312である.xnewの左境界は-2.931未満、右境界は10.312より大きい.もちろんピッチにも注意したほうがいいですが、xの精度 より小さいほうがいいです.
funcは関数で、中のパラメータx,y,kind,x,yは元のデータのx,y,kindは指定する方法 である. ynewはxnew配列とfunc関数によって を生成する必要がある.理論上xnew配列内の値が多ければ多いほど、生成された曲線は滑らかになる である.
ブログ参照
numpy、scipy、matplotlib
必要な方法の実装
補間
簡単に言えば、補間は既存のデータに基づいて埋め込まれ、最後に生成された曲線は必ず既存の点を通過する.
フィットは、既存のデータによって曲線係数を調整し、曲線と既知の点セットの差(最小二乗)を最小にし、最後に生成された曲線が必ずしも既存の点を通過するとは限らない.
コード実装
# -*- coding: utf-8 -*-
#
#
import numpy as np
#
from scipy import interpolate
#
import matplotlib.pyplot as plt
#
import random
# random.randint(0, 10) 0-10
# y 10 , y
y = np.array([random.randint(0, 10) for _ in range(10)])
# x , x
x = np.array([num for num in range(10)])
# x , 0 9 0.5 18
xnew = np.arange(0, 9, 0.5)
"""
kind :
nearest、zero、slinear、quadratic、cubic
func
"""
func = interpolate.interp1d(x, y, kind='cubic')
# xnew func ynew,xnew ynew
ynew = func(xnew)
#
#
plt.plot(x, y, 'ro-')
#
plt.plot(xnew, ynew)
plt.show()
注意事項
ブログ参照