行列またはテンソルからベクトルへの変換
数学 、特に 線型代数 と 行列理論 において 、 行列 の ベクトル化 とは 、行列を ベクトルに変換する 線型変換のことです。具体的には、 m × n 行列 A のベクトル化は 、 vec( A ) と表記され、 行列 Aの列を積み重ねることによって得られる mn × 1 列ベクトルです。
ここで、 は Aの i 行目 j 列目 の要素を表し 、上付き文字は 転置 を表します 。ベクトル化は、座標を通じて、 これら (つまり、行列とベクトル) 間の
同型性をベクトル空間として表現します。
ベク
(
あ
)
=
[
1つの
1
、
1
、
…
、
1つの
メートル
、
1
、
1つの
1
、
2
、
…
、
1つの
メートル
、
2
、
…
、
1つの
1
、
ん
、
…
、
1つの
メートル
、
ん
]
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} }}
1つの
私
、
じ
{\displaystyle a_{i,j}}
T
{\displaystyle {}^{\mathrm {T}}}
R
メートル
×
ん
:=
R
メートル
⊗
R
ん
≅
R
メートル
ん
{\displaystyle \mathbf {R} ^{m\times n}:=\mathbf {R} ^{m}\otimes \mathbf {R} ^{n}\cong \mathbf {R} ^{mn}}
たとえば、2×2 行列 の ベクトル化は です 。
あ
=
[
1つの
b
c
d
]
{\displaystyle A={\begin{bmatrix}a&b\\c&d\end{bmatrix}}}
ベク
(
あ
)
=
[
1つの
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 単位行列 です 。
ベク
(
あ
B
C
)
=
(
C
T
⊗
あ
)
ベク
(
B
)
{\displaystyle \operatorname {vec} (ABC)=(C^{\mathrm {T} }\otimes A)\operatorname {vec} (B)}
広告
あ
(
バツ
)
=
あ
バツ
−
バツ
あ
{\displaystyle \operatorname {ad} _{A}(X)=AX-XA}
ベク
(
広告
あ
(
バツ
)
)
=
(
私
ん
⊗
あ
−
あ
T
⊗
私
ん
)
ベク
(
バツ
)
{\displaystyle \operatorname {vec} (\operatorname {ad} _{A}(X))=(I_{n}\otimes AA^{\mathrm {T} }\otimes I_{n}){\text{vec}}(X)}
私
ん
{\displaystyle I_{n}}
他にも便利な定式が 2 つあります。
ベク
(
あ
B
C
)
=
(
私
ん
⊗
あ
B
)
ベク
(
C
)
=
(
C
T
B
T
⊗
私
け
)
ベク
(
あ
)
ベク
(
あ
B
)
=
(
私
メートル
⊗
あ
)
ベク
(
B
)
=
(
B
T
⊗
私
け
)
ベク
(
あ
)
{\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}}}
より一般的には、ベクトル化は任意のカテゴリの行列のモノイド閉構造における 自己随伴性 であることが示されている。 [1]
アダマール製品との互換性
ベクトル化は、アダマール積 (エントリワイズ)を持つ n × n 行列 の空間から、 アダマール積を持つ
C n 2 への代数準同型 である。
ベク
(
あ
∘
B
)
=
ベク
(
あ
)
∘
ベク
(
B
)
。
{\displaystyle \operatorname {vec} (A\circ B)=\operatorname {vec} (A)\circ \operatorname {vec} (B)。}
内部製品との互換性
ベクトル化は、フロベニウス (または ヒルベルト・シュミット ) 内積を持つ n × n 行列 の空間から C n 2 への ユニタリ変換 です 。
ここで、上付き文字 †は 共役転置を 表します 。
tr
(
あ
†
B
)
=
ベク
(
あ
)
†
ベク
(
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
私
=
[
0
、
…
、
0
、
1
、
0
、
…
、
0
]
T
{\textstyle \mathbf {e} _{i}=\left[0,\dots ,0,1,0,\dots ,0\right]^{\mathrm {T} }}
B
私
=
[
0
⋮
0
私
メートル
0
⋮
0
]
=
e
私
⊗
私
メートル
{\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 個のブロック行列 で構成され、これらの行列はすべて、 i 番目( m × m 単位行列 I m ) を除いてすべてゼロです。
X のベクトル化されたバージョンは 次のように表現できます。
ベク
(
バツ
)
=
∑
私
=
1
ん
B
私
バツ
e
私
{\displaystyle \operatorname {vec} (\mathbf {X} )=\sum _{i=1}^{n}\mathbf {B} _{i}\mathbf {X} \mathbf {e} _{i }}
Xに e i を乗算 すると i 番目の列が抽出され、 B i を乗算すると それが最終ベクトルの目的の位置に配置されます。
あるいは、線形和は クロネッカー積 を使用して表すこともできます。
ベク
(
バツ
)
=
∑
私
=
1
ん
e
私
⊗
バツ
e
私
{\displaystyle \operatorname {vec} (\mathbf {X} )=\sum _{i=1}^{n}\mathbf {e} _{i}\otimes \mathbf {X} \mathbf {e} _ {私}}
半ベクトル化
対称行列 A の場合 、ベクトル vec( A ) には厳密に必要な情報以上の情報が含まれます。これは、行列が対称性と 下三角 部分、つまり 主対角線 上およびその下の n ( n + 1)/2 個の要素によって完全に決定されるためです。このような行列では、 半ベクトル化が ベクトル化よりも便利な場合があります。対称 n × n 行列 A の半ベクトル化 vech( A ) は、 Aの下三角部分のみをベクトル化して得られる n ( n + 1)/2 × 1 列ベクトル です 。
ヴェック
(
あ
)
=
[
あ
1
、
1
、
…
、
あ
ん
、
1
、
あ
2
、
2
、
…
、
あ
ん
、
2
、
…
、
あ
ん
−
1
、
ん
−
1
、
あ
ん
、
ん
−
1
、
あ
ん
、
ん
]
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 行列 の場合 、半ベクトル化は です 。
あ
=
[
1つの
b
b
d
]
{\displaystyle A={\begin{bmatrix}a&b\\b&d\end{bmatrix}}}
ヴェック
(
あ
)
=
[
1つの
b
d
]
{\displaystyle \operatorname {vech} (A)={\begin{bmatrix}a\\b\\d\end{bmatrix}}}
行列の半ベクトル化をそのベクトル化に変換する一意の行列が存在し、その逆もまた同様であり、それぞれ 複製行列 と 消去行列 と呼ばれます。
プログラミング言語
行列を実装するプログラミング言語には、ベクトル化を簡単に行う手段がある場合があります。Matlab / GNU Octave では、 行列
は によって ベクトル 化 できます。GNU Octave では、と をそれぞれ 使用して ベクトル化と半ベクトル化も行えます 。Julia に も 関数 があります。Python では 、 NumPy 配列が メソッドを実装します [注 1]。一方、 Rでは 、 または関数 を使用して目的の効果を実現できます 。R では、 パッケージ 'ks' の 関数によってベクトル化が可能になり、 パッケージ 'ks' と 'sn' の両方に実装されている関数によって半ベクトル化が可能になります。 [2] [3] [4] AA(:)vec(A)vech(A)vec(A) flattenc()as.vector()vec()vech()
アプリケーション
ベクトル化は 行列計算 やその応用において、ランダムベクトルや行列のモーメント、漸近線、ヤコビ行列やヘッセ行列の計算などに利用されています。 [5]
また、局所感度や統計診断にも利用されています。 [6]
注記
^ ab 行優先ベクトル化の恒等式は です 。
ベク
(
あ
B
C
)
=
(
あ
⊗
C
T
)
ベク
(
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': Skew-Normal 分布と Skew-t などの関連分布」。R パッケージ バージョン 1.5.1 。
^ Vinod, Hrishikesh D. (2011). 「同時縮約とベクトルスタッキング」 R を使用した実践的な行列代数: アプリケーションによる能動的でやる気のある学習 シンガポール: World Scientific。pp. 233–248。ISBN 978-981-4313-69-8 – Google ブックス 経由。
^ Magnus, Jan; Neudecker, Heinz (2019). 行列微分計算と統計学および計量経済学への応用 . ニューヨーク: John Wiley. ISBN 9781119541202 。
^ 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 .