【連続系】MATLAB、Pythonで株価予測 その76【フーリエ変換⑬】

【連続系】MATLAB、Pythonで株価予測 その76【フーリエ変換⑬】 株価予測
【連続系】MATLAB、Pythonで株価予測 その76【フーリエ変換⑬】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/

はじめに

前回は、Python(Numpy)で直積は可能かを確認した。
結果としては可能。
ただし、ベクトル(数列)、行ベクトル、列ベクトルの違いでやや振り回された感はある。

今回は、Python(Numpy)によるフーリエ変換、逆フーリエ変換for文無し版にチャレンジ

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

Python(Numpy)によるフーリエ変換、逆フーリエ変換for文無し版

太郎くん
太郎くん

前回、Python(Numpy)の直積に関してはいろいろあったにしても
可能ってのがわかったわけだし、
フーリエ変換、逆フーリエ変換for文無し版も作れるよね。

フクさん
フクさん

一応作って来た。

太郎くん
太郎くん

大体流れは一緒な感じ?

フクさん
フクさん

流れは・・・一緒だな。
ただ、ベクトルの種別都合で変数を増やしてるところはあるな。

太郎くん
太郎くん

まぁとりあえずコードを見てみよう。

フーリエ変換、逆フーリエ変換for文無し版のコード

フクさん
フクさん

コードの差分は以下になる。

Fw = np.zeros(len(ft), dtype=complex) # F(ω) フーリエ変換後の関数格納用

# F(ω)=∫f(t)e^(-iωt)dt
cnt=0
for tn in t:
    Fw[cnt]=ft@np.exp(-1j*w*tn).T*dt
    cnt = cnt+1

fx = np.zeros(len(Fw), dtype=complex) # f(x) 逆フーリエ変換後の関数格納用

# f(x)=(1/2π)∫F(ω)e^(iωt)dω
cnt=0
x=t
for wn in w:
    fx[cnt]=Fw@np.exp(1j*wn*x).T*dw/(2*np.pi) 
    cnt = cnt+1

# ベクトルを行ベクトルへ変換
wMat=np.reshape(w, (1,N));
tMat=np.reshape(t, (1,N));

# F(ω)=∫f(t)e^(-iωt)dt
Fw=ft@np.exp(-1j*wMat.T@tMat)*dt;

# f(x)=(1/2π)∫F(ω)e^(iωt)dω
x=tMat
fx=Fw@np.exp(1j*wMat.T@x)*dw/(2*np.pi);

コードを見た感想

太郎くん
太郎くん

MATLABの時と同じようにかなりスッキリはしてるけど、
wMat、tMatってのが増やした変数ってところだね。

太郎くん
太郎くん

しかし、何ゆえに増やしたのかがわからん。

フクさん
フクさん

wMat、tMatはベクトル(数列)を行ベクトルに代えてる。
最初から行ベクトル、列ベクトルとすれば、
確かにこの変数は不要となる。
しかし、その場合、その後のplot時に変数参照が添え字だらけになって、かなりMATLABコードと乖離しちゃうんだよね。
それは嫌なんで一時的に行ベクトルにする変数を増やした。
って感じだ。

太郎くん
太郎くん

なるほど。
確かにMATLABコードと変に乖離するのは嫌だな。

フクさん
フクさん

まぁMATLAB側の時の話でfor文無し版のコードは使わない方針にしたわけだから、好き勝手書き換えても良かったんだけどね。
本音をいっちゃうとめんどくさかったから

太郎くん
太郎くん

(ぶっちゃけやがった・・・。)

太郎くん
太郎くん

まぁ出来るということが分かること自体は収穫だよね。

フクさん
フクさん

まだ実際に動かしてはいないけどね。

まとめ

フクさん
フクさん

まとめだよ。

  • Python(Numpy)によるフーリエ変換、逆フーリエ変換for文無し版を作成。
    • 基本的な流れはMATLABと一緒。
    • しかし、行ベクトル生成用の変数を追加している。
    • 最初からベクトルでも良いが、plotで使用する際に添え字が増えてMATLABコードと乖離し易くなるデメリットあり。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました