クロネッカー積とvec作用素とRoth's column lemma
クロネッカー積とvec作用素は見た目簡単なんだけど、各要素のインデックスを書き下すと頭の中こんがらがってわけわからなくなるから一旦整理した。インデックスに関する記事ってほとんどないね。あとそれに関連して Roth's column lemma っていうのが便利なのでちょっと紹介する。
まとめ
クロネッカー積とは
下の式を見ればひと目で分かるけど、 IxJ 行列 と KxL 行列 から IKxJL 行列を作る。
Wikipediaの例を見ると分かりやすい。
クロネッカー積のインデックス
クロネッカー積の定義は一目見ればすぐ分かるのに、各要素の定義を見ると途端にめんどくさくなる。
行のインデックスを見ると、K進数みたいになってるのが分かる。 の行のインデックスが1つ増えるためには、 の行のインデックスを一回ずつ辿らなきゃいけないって考えるとそうなることが分かる。列についても同じ。
実験
上式のインデキシングが本当に合ってるのか numpy.kron
を使って確かめる。
gist6cf39c77df3bf44fe6ed5aaf98c343cc
vec作用素
vec作用素は、以下のように IxJ 行列 の列ベクトルを全て一列に並べて1つの大きな IJ 次元列ベクトルを作る。
例えば、以下のようになる
vec作用素のインデックス
こっちはクロネッカー積よりは簡単。
クロネッカー積のときと同じで、J進数みたいになってる。各列ベクトルがJ次元なので、 の が増えるためには を全部辿らなきゃならない。
Roth's column lemma
これが成り立つ。
証明
をIxJ行列、 をJxK行列、 をKxL行列とし、
と置く。 は IxL 行列。
の各要素は(とうぜん)以下のように書ける。
クロネッカー積の要素を考えると
vec作用素の要素を考えると
なので、以下の行列ベクトル積の要素を考えると、
だから、証明完了。