バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/
はじめに
前回は、MATLAB版フーリエ変換、逆フーリエ変換を個別株チャートに対して実施。
FFTの時の特性に近い形で高分解能の周波数特性が得られた。
今回は、これのPython(Numpy)版にチャレンジ
登場人物
博識フクロウのフクさん

イラスト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)版コード修正箇所

まずはPython(Numpy)版コードを修正しないとね。

以下の修正でOKなはずだ。
L=np.pi # 波形の期間(-L~L)
w_max = 20 # 取りたい最大周波数
x=np.linspace(-L,L,255)
ft=np.sin(x)+np.sin(3*x)+np.sin(7*x) # 変換用波形読み込み
N=len(ft) # 波形のplot数取得
↓
L=np.pi # 波形の期間(-L~L)
w_max = 13 # 取りたい最大周波数
stock=np.loadtxt('TM1.csv',delimiter=',') # 変換用波形読み込み
N=len(stock) # 波形のplot数取得
ft=np.array(stock) # 波形を行ベクトルへ
ft=ft-np.mean(ft)
コード考察

まぁcsvを読み込む部分はMATLAB時と同じ考え方として、
MATLABの時は列ベクトルを行ベクトルにする処理が増えてたけど、
Python(Numpy)版は・・・特に行ベクトルには直してない?

Pythonの場合は、列ベクトルでも行ベクトルでもない、ベクトルに直しているな。

あ!
ft=np.array(stock) # 波形を行ベクトルへ)
の部分で、それをやっているのか!

そうそう。
MATLABの時は行ベクトルをキープしていた方がいろいろ楽ができるように
Python(Numpy)の場合は列ベクトル、行ベクトルではなくベクトルをキープした方が楽ができるな。

そこらへんは、ほんと環境依存だよねー。
茶番劇

あとは、MATLABの場合、ベクトル、行列はデフォルトで内積に対して、
Pythonの場合はアダマール積になったりするから、
なんど事故ったか・・・。

(地味にいろいろ苦労してそうだな・・・。)

最近何度も言ってるけど、
Python(Numpy)版のコードも起こすのはメンドクサイ!!

(なんかストレスも溜まってるな・・・。)

まぁまぁ、このシリーズもあと少しな感じじゃん?
もうコードを弄るのも最後なんじゃない?

いんや。
極大値、極小値特定が残ってる。

それは・・・FFTの時の奴を使いまわせないの?

たぶん、コピペレベルで行けるつもりでは居るけど、
もうMATLABとPythonを往ったり来たりするのは御免こうむりたい!!

わかったよー。
じゃー、その部分は僕の方でみるよー。

その言葉を待ってた。
まかせた。

(なんかハメられたーーーーー!!!)

(最後くらい脳みそ動かしてもらわんとな)
まとめ

まとめだよ。
- Python(Numpy)版の個別株チャートに対しするフーリエ変換、逆フーリエ変換のコードにするための修正。
- csv読み取り部分を追加。
- 列ベクトルで取得されるのでベクトルに変換。
- csv読み取り部分を追加。
- MATLABとPythonのベクトル周りがいろいろクセが違うのでだんだん嫌になってきた。
バックナンバーはこちら。
コメント