二次形式を行列計算を使って簡単に計算
最近Pythonでプログラム書くときに使った小技のめも。ベクトルは縦ベクトルとする。
という大きさDの縦ベクトルがn個あり、
という大きさD×Dの行列があったとき、
というn個の二次形式をfor文使わずに求めることを考えます。
という
大きさD×Nを作り、これにを左からかけると
というD×Nの行列ができ、
これに左からというN×Dを左からかけると、N×Nという大きさの((D×N)×(N×D)=(N×N))
となり、欲しいが対角成分に存在していることがわかります。
よってnumpyのnp.diag()を使って対角成分を抽出すれば対角成分が横に並んだ大きさNの横ベクトルを得られ、目的達成です。
for文を回さずにn個の入力ベクトルxに対するn個の二次形式yを求めることができました。