Python 学習:scipy.interpolate

2014-12-12 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
4、3、0、0、1、 0、0、0、1、0(41)で、換算ポイント 67pt 。
一昨日夕方「FM COCOLO」が5位にダウン。
昨日朝方「グルコサミン」が2位に、「Firefox」が6位にダウン。
そして今朝方「C言語」が2位に、「Firefox」が9位にまでダウン。
・-・ - -・


さて、本文。

先週(2014-12-06)の記事:
Python 学習:スプライン曲線
では、自前でコード化したが、・・・・・

天下(?)のPython、就中(なかんずく)“SciPy”だったら、
「スプライン曲線」/「スプライン補間」が無い訳が無いと思った。


やはり、ありました。


「SciPy v0.14.0 Reference Guide」の「SciPy Tutorial」にある、
Interpolation (scipy.interpolate)

これで、学習。

(1) 1次元補間(interp1d)
  補間の種類を 'cubic' で。

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

xj = [ 0.9, 1.3, 1.9, 2.1, 2.6, 3.0, 3.9, 4.4, 4.7, 5.0, 6.0, 7.0, 8.0, 9.2 ]
yj = [ 1.3, 1.5, 1.85, 2.1, 2.6, 2.7, 2.4, 2.15, 2.05, 2.1, 2.25, 2.3, 2.25, 1.95 ]

f2 = interp1d( xj, yj, kind='cubic' ) ### kind='cubic' とする
xn = np.linspace( 0.9, 9.2, 100 )
plt.plot( xn, f2(xn), 'r-' )
plt.plot( xj, yj, 'bo' )
plt.show()


これでは、「自作」コードの結果と比べて、
両端では、些か形が異なる。


(2)1次元Spline補間:手続き的(interpolate.splXXX)
  'splrep' で、補間関数(群)を求めて置いて、
  'splev' で、指定座標での補間値を求める。

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

xj = [ 0.9, 1.3, 1.9, 2.1, 2.6, 3.0, 3.9, 4.4, 4.7, 5.0, 6.0, 7.0, 8.0, 9.2 ]
yj = [ 1.3, 1.5, 1.85, 2.1, 2.6, 2.7, 2.4, 2.15, 2.05, 2.1, 2.25, 2.3, 2.25, 1.95 ]

tck = interpolate.splrep( xj, yj, s=0 ) ### s=0 とする
xn = np.linspace( 0, 10, 100 ) ### 外挿も可能
yn = interpolate.splev( xn, tck, der=0 )
plt.plot( xn, yn, 'r-' )
plt.plot( xj, yj, 'bo' )
plt.show()


これだと、「自作」コードの結果に近い。


(3)1次元Spline補間:オブジェクト指向(UnivariateSpline)

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import InterpolatedUnivariateSpline

xj = [ 0.9, 1.3, 1.9, 2.1, 2.6, 3.0, 3.9, 4.4, 4.7, 5.0, 6.0, 7.0, 8.0, 9.2 ]
yj = [ 1.3, 1.5, 1.85, 2.1, 2.6, 2.7, 2.4, 2.15, 2.05, 2.1, 2.25, 2.3, 2.25, 1.95 ]

ius = InterpolatedUnivariateSpline( xj, yj )
xn = np.linspace( 0, 10, 100 ) ### 外挿も可能
yn = ius( xn )
plt.plot( xn, yn, 'r-' )
plt.plot( xj, yj, 'bo' )
plt.show()


気分的かも知れないが、
この結果が、一番近そう。

これに決めますか?

でも、
'interpolate.splXXX' は、微分/積分も出来るので、捨てがたい。


本日はここまで。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


141031
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク