daruma3940の日記

理解や文章に間違い等あればどんなことでもご指摘お願いします

numpy.liag.eighの使い方について

numpy.liag.eighはnumpyのエルミート行列の固有値固有ベクトルを求める場合に使います
こんな感じ

eigval, eigvec = LA.eigh(a)

僕はこれの使い方をちゃんとわかっていませんでした
eigvecは2次元配列です何個目の固有ベクトルかとその固有ベクトルの何番目の成分かというので2次元になっています

つまり
eigvec[a][b]
とあらわされます
C++とかにおける二次元配列の扱いに慣れているとevec[a][b]は[a個目の固有ベクトル][この固有ベクトルのb番目の成分]と並んでいると勘違いしてしまいますね(僕だけかもしれないが)
しかしeighで帰ってくる固有ベクトルはevec[この固有ベクトルのa番目の成分][b個目の固有ベクトル]という順番で並んでいます。
マニュアルを読んでみてください。そう書かれてますね
numpy.linalg.eigh — NumPy v1.14 Manual

(この並びにしてる理由は行列の掛け算則に乗るようにしてるのだと思いますが確申が持てません 間違ってたら指摘して)

僕はこれを数ヶ月勘違いしたまま「データが取れないデータが取れない」とうんうん悩んでました当たり前ですね
皆さんもこういうライブラリを使うときはちゃんとマニュアルを読んで使いましょうね