【FFT】MATLAB、Pythonで株価予測 その31【IFFT⑩】

【FFT】MATLAB、Pythonで株価予測 その31【IFFT⑩】 株価予測
【FFT】MATLAB、Pythonで株価予測 その31【IFFT⑩】

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

はじめに

前回はMATLABによるFFT出力の周波数分布をローテーションを実施。
複素共役が0点を中心とした線対称になるように配置にすることはできた。

今回からはこれの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)によるベクトルのローテーション」だね。

フクさん
フクさん

Numpyにrollというメソッドがあるんで、これを使う。

太郎くん
太郎くん

これも罠があるんじゃ・・・。

フクさん
フクさん

まぁ罠はないというか、MATLABとは性格が違って、
自動で期待通りに合わせこんでくれちゃうって感じかなー。

実際にやってみる。

太郎くん
太郎くん

まぁ実際につかってみるか・・・。

>>> import numpy as np
>>> A=np.array([1,2,3,4,5])
>>> np.roll(A,3)
array([3, 4, 5, 1, 2])
太郎くん
太郎くん

お!
ちゃんと狙った通りローテーションするじゃん!

太郎くん
太郎くん

で、MATLABとの差ってのは何?
Numpyだとデフォルトで行ベクトルで、列ベクトルの場合は別の指定の仕方をするって感じ?

フクさん
フクさん

そもそも今、太郎くんが使ったのは行ベクトルじゃなくてベクトルだな。
Numpyはベクトルが3種類ある。

Numpyのベクトルの種類

太郎くん
太郎くん

ベクトルの種類?
ベクトルというと、
縦に並ぶ列ベクトル、横に並ぶ行ベクトルが思いつくけど、
もう1種類あるってこと?
今回は行ベクトルでやったつもりだったんだけど?

フクさん
フクさん

Numpyのベクトルは

  • ベクトル
  • 列ベクトル
  • 行ベクトル

の3つがある。
今回は行ベクトルのつもりだったかもしれないが、最初の「ベクトル」に該当する。

太郎くん
太郎くん

具体的な差がわからん。

フクさん
フクさん

たぶん意味不明なのが一番最初の「ベクトル」だろうね。
こいつはベクトルではあるのだけど、行、列の概念がなく転置が効かない。
まぁベクトルというより数列って位置づけになっているのかもしれないけど。

太郎くん
太郎くん

とすると、列ベクトルと行ベクトルはどう書けば良いんだ?

フクさん
フクさん

こんな感じだな。

# 行ベクトル
>>> np.array([[1,2,3,4,5]])
array([[1, 2, 3, 4, 5]])

# 列ベクトル
>>> np.array([[1,2,3,4,5]]).T
array([[1],
       [2],
       [3],
       [4],
       [5]])
太郎くん
太郎くん

“[“、”]”がもう一個外側に増えた感じ?

フクさん
フクさん

そうそう。
この”[“、”]”が無いと行ベクトルと認識されず、転置をしていしても転置しない。

太郎くん
太郎くん

マジか。
試してみるか。

>>> np.array([1,2,3,4,5]).T
array([1, 2, 3, 4, 5])
太郎くん
太郎くん

あ、ホントだ!
転置されない!

フクさん
フクさん

ベクトルを単なる数列的に扱う場合はほとんど問題にはならないのだけど、
行列含めた演算をするときにハマり易い仕様だね。

フクさん
フクさん

そして、rollメソッドはベクトル、行ベクトル、列ベクトル、どれに大しても同じようにローテーションしてくれる。
これはベクトルと行列を分けた考え方をしているためだろう。

太郎くん
太郎くん

便利と言えば便利だけど、
知らないと、よくわからないところでハマりそう。

フクさん
フクさん

そうそう。
MATLABコードからPythonコード、または逆へ移植しようとしたときに散々悩まされたねー。

太郎くん
太郎くん

似ているが故に、ちょっと差があるとハマるってことだねー。

まとめ

フクさん
フクさん

まとめだよ。

  • Python(Numpy)によるベクトルのローテーションをお試し。
    • 無事ローテーション可能。
  • Pythonはベクトルに種類がある。
    • ベクトル。
      • 転置等の行列由来の演算ができない。
    • 行ベクトル。
    • 列ベクトル。
    • 行列演算を意識する際はベクトル以外の定義をする必要がある。
    • ※ 今回は「ベクトル」でOK。

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

コメント

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