行列のブロック分割

こんにちは、おぐえもん(@oguemon_com)です。

前回の記事では、行列を扱う上で注意すべきことについて扱いました。

さて、行列の話で忘れてはならないのは、行列は2×22 \times 2行列や3×33 \times 3行列のようなミニサイズのものばかりでなく、その何回りも大きなサイズについても考える必要があることです。

A=(a11a12a13a14a15a1na21a22a23a24a25a2na31a32a33a34a35a3na41a42a43a44a45a4na51a52a53a54a55a5na61a62a63a64a65a6nam1am2am3am4am5amn)A=\left( \begin{array}{cccccccccc} a_{11} & a_{12} & a_{13} & a_{14} & a_{15} & \ldots & a_{1n} \\ a_{21} & a_{22} & a_{23} & a_{24} & a_{25} & \ldots & a_{2n} \\ a_{31} & a_{32} & a_{33} & a_{34} & a_{35} & \ldots & a_{3n} \\ a_{41} & a_{42} & a_{43} & a_{44} & a_{45} & \ldots & a_{4n} \\ a_{51} & a_{52} & a_{53} & a_{54} & a_{55} & \ldots & a_{5n} \\ a_{61} & a_{62} & a_{63} & a_{64} & a_{65} & \ldots & a_{6n} \\ \vdots & \vdots & \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & a_{m3} & a_{m4} & a_{m5} & \ldots & a_{mn} \end{array} \right)

そのような大規模な行列も含めた、行列の一般的な性質を考える上で、行列を縦横で切って何個かの部分に分割すると、色々捗る場合があります。今回は、行列を小分けにするテクニック「ブロック分割」を解説します。

ブロック行列って何?

まずは例を示しましょう。以下の5×55 \times 5行列

A=(a11a12a13a14a15a21a22a23a24a25a31a32a33a34a35a41a42a43a44a45a51a52a53a54a55)A=\left( \begin{array}{ccccc} a_{11} & a_{12} & a_{13} & a_{14} & a_{15} \\ a_{21} & a_{22} & a_{23} & a_{24} & a_{25} \\ a_{31} & a_{32} & a_{33} & a_{34} & a_{35} \\ a_{41} & a_{42} & a_{43} & a_{44} & a_{45} \\ a_{51} & a_{52} & a_{53} & a_{54} & a_{55} \end{array} \right)

について、3 列目の右を縦方向にカットし、4行目の下を横方向にカットすると、以下の 4 パーツが生まれます。

A11=(a11a12a13a21a22a23a31a32a33a41a42a43),A12=(a14a15a24a25a34a35a44a45)A21=(a51a52a53),A22=(a54a55)\begin{aligned} A_{11}&=\left( \begin{array}{ccc} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \\ a_{41} & a_{42} & a_{43} \end{array} \right), A_{12}&=\left( \begin{array}{cc} a_{14} & a_{15} \\ a_{24} & a_{25} \\ a_{34} & a_{35} \\ a_{44} & a_{45} \end{array} \right) \\ A_{21}&=\left( \begin{array}{ccc} a_{51} & a_{52} & a_{53} \end{array} \right), A_{22}&=\left( \begin{array}{cc} a_{54} & a_{55} \end{array} \right) \end{aligned}

これで、もとの行列は次のように表されます。

A=(A11A12A21A22)A= \left( \begin{array}{cc} A_{11} & A_{12} \\ A_{21} & A_{22} \end{array} \right)

このような分割を、行列AAのブロック分割と呼び、また、分割された小さい行列を小行列と呼びます。

縦横のカットが行列を貫いてさえいれば、カットの幅や高さは自由です。

行や列への分割

行列を行ごとや列ごとにカットするシチュエーションが多々あります。

【行ベクトルに分割】

A=(a1a2am)A= \left( \begin{array}{c} \boldsymbol{a_{1}} \\ \boldsymbol{a_{2}} \\ \vdots \\ \boldsymbol{a_{m}} \end{array} \right)

※要素のひとつひとつは行ベクトルで、それが行数分だけ縦に並んでいます。

【列ベクトルに分割】

A=(b1b2bm)A= \left( \begin{array}{cccc} \boldsymbol{b_{1}} & \boldsymbol{b_{2}} & \ldots & \boldsymbol{b_{m}} \end{array} \right)

※要素のひとつひとつは列ベクトルで、それが列数分だけ横に並んでいます。

こういった分割を、それぞれ「行への分割」「列への分割」といいます。

ブロック分割の演算

大きな行列を小行列の集まりだと見たときの計算について見てみます。

ブロック分割の和とスカラー倍

ここでの仮定

2 つの大きな行列A,BA,Bがあって、両者は行数も列数も同じのみならず、分割の仕方も同じものとします。

A=(A11A12A1nA21A22A2nAm1Am2Amn)B=(B11B12B1nB21B22B2nBm1Bm2Bmn)\begin{aligned} A&=\left( \begin{array}{cccc} A_{11} & A_{12} & \ldots & A_{1n} \\ A_{21} & A_{22} & \ldots & A_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ A_{m1} & A_{m2} & \ldots & A_{mn} \\ \end{array} \right) \\ B&=\left( \begin{array}{cccc} B_{11} & B_{12} & \ldots & B_{1n} \\ B_{21} & B_{22} & \ldots & B_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ B_{m1} & B_{m2} & \ldots & B_{mn} \\ \end{array} \right) \end{aligned}

どの小行列も、AijA*{ij}BijB*{ij}はサイズが一緒!

行列の和が、対応する成分同士の足し算だったことを踏まえると、和の小行列が 2 つの小行列の和になるのは明らかです。差についても一緒ですよ〜

ブロック分割の和
A+B=(A11+B11A12+B12A1n+B1nA21+B21A22+B22A2n+B2nAm1+Bm1Am2+Bm2Amn+Bmn)A+B=\left( \begin{array}{cccc} A_{11}+B_{11} & A_{12}+B_{12} & \ldots & A_{1n}+B_{1n} \\ A_{21}+B_{21} & A_{22}+B_{22} & \ldots & A_{2n}+B_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ A_{m1}+B_{m1} & A_{m2}+B_{m2} & \ldots & A_{mn}+B_{mn} \end{array} \right)

スカラー倍は各成分に掛け合わせるのでした。よって、各小行列にスカラーを掛けた場合と同じことになります。

ブロック分割のスカラー倍
λA=(λA11λA12λA1nλA21λA22λA2nλAm1λAm2λAmn){\lambda}A=\left( \begin{array}{cccc} {\lambda}A_{11} & {\lambda}A_{12} & \ldots & {\lambda}A_{1n} \\ {\lambda}A_{21} & {\lambda}A_{22} & \ldots & {\lambda}A_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ {\lambda}A_{m1} & {\lambda}A_{m2} & \ldots & {\lambda}A_{mn} \end{array} \right)

ブロック分割の積

めちゃくちゃ複雑な条件が伴います。

ここでの仮定

2 つの大きな行列A,BA,Bがあって、

  • AAの列数とBBの行数は同じ
  • AAの列ごとの分割数と、BBの行ごとの分割数も同じ
  • 小行列AikA*{ik}の列数と、小行列BkjB*{kj}の行数が同じ
A=(A11A12A1rA21A22A2rAm1Am2Amr)B=(B11B12B1nB21B22B2nBr1Br2Brn)\begin{aligned} A&=\left( \begin{array}{cccc} A_{11} & A_{12} & \ldots & A_{1r} \\ A_{21} & A_{22} & \ldots & A_{2r} \\ \vdots & \vdots & \ddots & \vdots \\ A_{m1} & A_{m2} & \ldots & A_{mr} \\ \end{array} \right) \\ B&=\left( \begin{array}{cccc} B_{11} & B_{12} & \ldots & B_{1n} \\ B_{21} & B_{22} & \ldots & B_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ B_{r1} & B_{r2} & \ldots & B_{rn} \\ \end{array} \right) \end{aligned}

さらに!どの小行列も、AikA*{ik}の列数とBkjB*{kj}の行数が一緒!

要は、これから出てくる式が定義できる(積の条件を満たす)ように条件づくりをしているわけです。

上の条件が整った時、AABBの積はこうなります。

ブロック分割のスカラー倍
AB=(C11C12C1nC21C22C2nCm1Cm2Cmn)AB= \left( \begin{array}{cccc} C_{11} & C_{12} & \ldots & C_{1n} \\ C_{21} & C_{22} & \ldots & C_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ C_{m1} & C_{m2} & \ldots & C_{mn} \\ \end{array} \right) ただし、Cij=v=1rAivBvj\text{ただし、}C_{ij}=\sum_{v=1}^{r}A_{iv}B_{vj}

条件さえ整えば、ブロック分割した大きな行列同士の積は、小行列を成分みたいに扱って積の式を組むことができるのですね。

注意点

注意して欲しいのは、これらの式は行列を小行列の集まりとみなしたときの計算上の関係を示したものに過ぎず、演算結果の成分を求めたいときに、計算量が減るものではありません(むしろ手間が増えます)。

これらの関係式は、例えば大きい行列なんかで、行列の一部にしか用がないときに初めて役に立ちます。(無用な部分を計算する必要がないから)

おわりに

今回は、行列を縦横に分断して考える「ブロック分割」というテクニックについて、その性質を交えて解説しました。

これで、線形代数のキホンにあたる部分は終了です!これからは、「連立方程式」と絡めた議論や、「行列式」という特別な指標を交えた議論、さらには高校時代の空間ベクトルに立ち返るリバイバル企画など、様々なネタが展開されていきます。決してゴールは近くないのですが、一歩ずつ頑張っていきましょう!

>>カテゴリートップ(大学 1 年生と再履生のための線形代数入門)へ戻る

▲ トップへ戻る