たけっぱ横丁

the technical document for Vim(Editor), Natural Language Proecssing(NLP) tools and Programming(Python, Ruby, C++ etc).

PythonでGram-Schmidt(グラム-シュミット)正規直交化をする

pythonC/C++と違って
何やるにしても十分にツールが充実しているのがすばらしいですね

ということで、今日はpythonでGram-Schmidt正規直交化を紹介します!

正規直交化っていうのは、いくつかのベクトル列から
正規直交(大きさ1, 直交なベクトルの内積は必ず0)なベクトル群を作り出す操作ですね。

大学生ならできて当然、線形代数でも超標準操作です. (アルゴリズム的には, 最初のベクトルを正規化して
その成分を他のベクトルから引けば必然的に直交になるよねってことです) 詳細は割愛.

numpyでは一行でかけます.(numpy.linalgクラスに線形代数(linear algebra)操作のモジュールがまとまってます) numpyはQR分解ではGram-Schmidt正規直交化が使われるんですね。

import numpy as np

mtx = np.array([[1,3],[0,5]])
q, r = np.linalg.qr(mtx)         #qに正規直交化されたベクトルが格納される

print q

pythonべんりー。numpyすげー