Conversion of a matrix or a tensor to a vector
数学 、特に 線型代数 と 行列理論 において、 行列 の ベクトル化 とは、行列をベクトルに変換する線型変換の こと です 。 具体的には、 m × n 行列 A のベクトル化 (vec( A )と表記)は、行列 Aの列を積み重ねることで得られる mn × 1 列ベクトルです 。 ここで、は Aの i 行 j 列目 の要素を表し 、上付き文字は 転置を 表します 。ベクトル化は、座標を用いて、 これら(つまり行列とベクトル)間の 同型性をベクトル空間として表現します。 vec ( A ) = [ a 1 , 1 , … , a m , 1 , a 1 , 2 , … , a m , 2 , … , a 1 , n , … , a m , n ] T {\displaystyle \operatorname {vec} (A)=[a_{1,1},\ldots ,a_{m,1},a_{1,2},\ldots ,a_{m,2},\ldots ,a_{1,n},\ldots ,a_{m,n}]^{\mathrm {T} }} a i , j {\displaystyle a_{i,j}} T {\displaystyle {}^{\mathrm {T} }} R m × n := R m ⊗ R n ≅ R m n {\displaystyle \mathbf {R} ^{m\times n}:=\mathbf {R} ^{m}\otimes \mathbf {R} ^{n}\cong \mathbf {R} ^{mn}}
たとえば、2×2 行列 の ベクトル化は です 。 A = [ a b c d ] {\displaystyle A={\begin{bmatrix}a&b\\c&d\end{bmatrix}}} vec ( A ) = [ a c b d ] {\displaystyle \operatorname {vec} (A)={\begin{bmatrix}a\\c\\b\\d\end{bmatrix}}}
A のベクトル化とその転置のベクトル化の 関係は、 交換行列 によって与えられます。
クロネッカー製品との互換性 ベクトル化は、 クロネッカー積と組み合わせて、 行列乗算を 行列上の線形変換として表現するために頻繁に用いられます 。特に、 k × l 、 l × m 、 m × n 次元の 行列 A 、 B 、 C の場合に当てはまります。 [注 1] 例えば、 ( すべての n × n行列の 複素 要素を持つ リー代数 gl( n , C ) の 随伴自己準同型 )の場合 、 となります。ここでは n × n 単位行列 です 。 vec ( A B C ) = ( C T ⊗ A ) vec ( B ) {\displaystyle \operatorname {vec} (ABC)=(C^{\mathrm {T} }\otimes A)\operatorname {vec} (B)} ad A ( X ) = A X − X A {\displaystyle \operatorname {ad} _{A}(X)=AX-XA} vec ( ad A ( X ) ) = ( A ⊗ I n − I n ⊗ A T ) vec ( X ) {\displaystyle \operatorname {vec} (\operatorname {ad} _{A}(X))=(A\otimes I_{n}-I_{n}\otimes A^{\mathrm {T} }){\text{vec}}(X)} I n {\displaystyle I_{n}}
他にも便利な定式が 2 つあります。 vec ( A B C ) = ( I n ⊗ A B ) vec ( C ) = ( C T B T ⊗ I k ) vec ( A ) vec ( A B ) = ( I m ⊗ A ) vec ( B ) = ( B T ⊗ I k ) vec ( A ) {\displaystyle {\begin{aligned}\operatorname {vec} (ABC)&=(I_{n}\otimes AB)\operatorname {vec} (C)=(C^{\mathrm {T} }B^{\mathrm {T} }\otimes I_{k})\operatorname {vec} (A)\\\operatorname {vec} (AB)&=(I_{m}\otimes A)\operatorname {vec} (B)=(B^{\mathrm {T} }\otimes I_{k})\operatorname {vec} (A)\end{aligned}}}
B が 対角行列 (すなわち) の 場合 、ベクトル化は列方向のクロネッカー積 ( カトリ・ラオ積 を 参照)と B の 主対角線を 使用して記述できます。 B = diag ( b 1 , … , b n ) {\textstyle B=\operatorname {diag} (b_{1},\dots ,b_{n})} ∗ {\textstyle \ast } b = [ b 1 , … , b n ] T {\textstyle b={\begin{bmatrix}b_{1},\dots ,b_{n}\end{bmatrix}}^{\mathrm {T} }} vec ( A B C ) = ( C T ∗ A ) b {\displaystyle \operatorname {vec} (ABC)=(C^{\mathrm {T} }\ast A)b}
より一般的には、ベクトル化は任意のカテゴリの行列のモノイド閉構造における 自己随伴性で あることが示されている。 [1]
アダマール製品との互換性 ベクトル化は、 n × n 行列 の空間からその アダマール積を持つ C n 2 への 代数準同型 である。 vec ( A ∘ B ) = vec ( A ) ∘ vec ( B ) . {\displaystyle \operatorname {vec} (A\circ B)=\operatorname {vec} (A)\circ \operatorname {vec} (B).}
内部製品との互換性 ベクトル化は、 フロベニウス (または ヒルベルト・シュミット ) 内積を持つ n × n 行列 の空間から C n 2 への ユニタリ変換 です。 ここで、上付き文字の †は 共役転置 を表します 。 tr ( A † B ) = vec ( A ) † vec ( B ) , {\displaystyle \operatorname {tr} (A^{\dagger }B)=\operatorname {vec} (A)^{\dagger }\operatorname {vec} (B),}
線形和としてのベクトル化 行列のベクトル化演算は線形和で表すことができます。X を ベクトル化したい m × n 行列とし、 e i をn 次元空間の i 番目の標準基底ベクトル(つまり ) とします 。B i を 以下のように定義される( mn ) × m ブロック行列
とし ます。 e i = [ 0 , … , 0 , 1 , 0 , … , 0 ] T {\textstyle \mathbf {e} _{i}=\left[0,\dots ,0,1,0,\dots ,0\right]^{\mathrm {T} }} B i = [ 0 ⋮ 0 I m 0 ⋮ 0 ] = e i ⊗ I m {\displaystyle \mathbf {B} _{i}={\begin{bmatrix}\mathbf {0} \\\vdots \\\mathbf {0} \\\mathbf {I} _{m}\\\mathbf {0} \\\vdots \\\mathbf {0} \end{bmatrix}}=\mathbf {e} _{i}\otimes \mathbf {I} _{m}}
B i は 、列方向に積み重ねられたサイズ m × m のn 個のブロック行列 で構成され、これらの行列はすべて、 m × m 単位行列 I m である i 番目の行列を除いてすべてゼロです。
X のベクトル化されたバージョンは 次のように表現できます。 vec ( X ) = ∑ i = 1 n B i X e i {\displaystyle \operatorname {vec} (\mathbf {X} )=\sum _{i=1}^{n}\mathbf {B} _{i}\mathbf {X} \mathbf {e} _{i}}
Xに e i を乗算する と i 番目の列が抽出され、 B i を乗算すると それが最終ベクトルの目的の位置に配置されます。
あるいは、線形和は クロネッカー積 を使用して表すこともできます。 vec ( X ) = ∑ i = 1 n e i ⊗ X e i {\displaystyle \operatorname {vec} (\mathbf {X} )=\sum _{i=1}^{n}\mathbf {e} _{i}\otimes \mathbf {X} \mathbf {e} _{i}}
半ベクトル化 対称行列 A の場合 、ベクトル vec( A ) には厳密に必要な以上の情報が含まれます。これは、行列が対称性と 下三角 部分、つまり 主対角線 上とその下の n ( n + 1)/2 個の要素によって完全に決定されるためです。このような行列では、ベクトル化よりも 半ベクトル化の 方が便利な場合があります。対称 n × n 行列 A の半ベクトル化 vech( A ) は、 Aの下三角部分のみをベクトル化して得られる n ( n + 1)/2 × 1 の列ベクトル です 。 vech ( A ) = [ A 1 , 1 , … , A n , 1 , A 2 , 2 , … , A n , 2 , … , A n − 1 , n − 1 , A n , n − 1 , A n , n ] T . {\displaystyle \operatorname {vech} (A)=[A_{1,1},\ldots ,A_{n,1},A_{2,2},\ldots ,A_{n,2},\ldots ,A_{n-1,n-1},A_{n,n-1},A_{n,n}]^{\mathrm {T} }.}
たとえば、2×2行列 の場合 、半ベクトル化は です 。 A = [ a b b d ] {\displaystyle A={\begin{bmatrix}a&b\\b&d\end{bmatrix}}} vech ( A ) = [ a b d ] {\displaystyle \operatorname {vech} (A)={\begin{bmatrix}a\\b\\d\end{bmatrix}}}
行列の半ベクトル化をそのベクトル化に変換する一意の行列が存在し、その逆もまた同様であり、それぞれ 複製行列 と 消去行列 と呼ばれます。
プログラミング言語 行列を実装するプログラミング言語に は、ベクトル化を容易にする手段がある。Matlab / GNU Octave では、行列は によってベクトル A化できる A(:)。GNU Octave vec(A)では、とを使ってそれぞれ ベクトル化と半ベクトル化も可能である vech(A)。Julia に vec(A)も 関数 がある。Python の NumPy 配列では flattenというメソッドが実装されている [注 1]が、 R では または c()関数を使う as.vector()か、より効率的に を使って行列の次元属性を削除することで 目的の効果を得ることができる 。Rでは 、 パッケージ「ks」の 関数 Aによって ベクトル化が可能であり、パッケージ「ks」と「sn」の両方に実装されている 関数 によって 半ベクトル化が可能である。 [2] [3] [4] dim(A) <- NULLvec()vech()
アプリケーション ベクトル化は 行列計算 とその応用において、例えばランダムベクトルや行列のモーメント、漸近線、ヤコビ行列やヘッセ行列の計算などに用いられます。 [5] また、
局所感度解析や統計診断にも用いられます。 [6]
注記 ^ ab 行優先ベクトル化の恒等式は です 。 vec ( A B C ) = ( A ⊗ C T ) vec ( B ) {\displaystyle \operatorname {vec} (ABC)=(A\otimes C^{\mathrm {T} })\operatorname {vec} (B)}
参照
参考文献 ^ Macedo, HD; Oliveira, JN (2013). 「線形代数の型付け:双積指向アプローチ」. コンピュータプログラミング科学 . 78 (11): 2160– 2191. arXiv : 1312.4818 . doi :10.1016/j.scico.2012.07.012. S2CID 9846072. ^ Duong, Tarn (2018). 「ks: カーネルスムージング」. Rパッケージバージョン1.11.0 . ^ Azzalini, Adelchi (2017). 「Rパッケージ『sn』:歪正規分布と歪t分布などの関連分布」 Rパッケージバージョン1.5.1 。 ^ Vinod, Hrishikesh D. (2011). 「同時縮約とベクトルスタッキング」. Rを用いた実践的な行列代数:応用による能動的かつ意欲的な学習 . シンガポール: World Scientific. pp. 233– 248. ISBN 978-981-4313-69-8 – Google ブックス 経由 。 ^ マグナス、ヤン、ノイデッカー、ハインツ (2019). 『行列微分計算とその統計学および計量経済学への応用 』 ニューヨーク: ジョン・ワイリー. ISBN 978-1-119-54120-2 。 ^ Liu, Shuangzhe; Leiva, Victor; Zhuang, Dan; Ma, Tiefeng; Figueroa-Zúñiga, Jorge I. (2022年3月). 「行列微分計算とその多変量線形モデルへの応用とその診断法」. Journal of Multivariate Analysis . 188 104849. doi : 10.1016/j.jmva.2021.104849 .