行列はベクトルを集めたもの
A = ( a 11 a 12 a 21 a 22 ) A =
\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22}
\end{pmatrix} A = ( a 11 a 21 a 12 a 22 ) \renewcommand{\b} when command \b does not yet exist; use \newcommand
% 太字のalias
\renewcommand{\b}[1]{\boldsymbol{#1}}
%
\DeclareMathOperator{\Ker}{\text{Ker}}
\DeclareMathOperator{\Im}{\text{Im}}
\DeclareMathOperator{\dim}{\text{dim}}
\DeclareMathOperator{\rank}{\text{rank}}
%行列積 ¶ A = ( a 11 a 12 a 21 a 22 ) , B = ( b 11 b 12 b 21 b 22 ) A =
\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22}
\end{pmatrix}, \
B =
\begin{pmatrix}
b_{11} & b_{12}\\
b_{21} & b_{22}
\end{pmatrix} A = ( a 11 a 21 a 12 a 22 ) , B = ( b 11 b 21 b 12 b 22 ) とすると、行列積(matrix multiplication)は
A B = ( a 11 a 12 a 21 a 22 ) ( b 11 b 12 b 21 b 22 ) = ( a 11 b 11 + a 12 b 21 a 11 b 12 + a 12 b 22 a 21 b 11 + a 22 b 21 a 21 b 12 + a 22 b 22 ) A B =
\begin{pmatrix}
a_{11} & a_{12}\\
a_{21} & a_{22}
\end{pmatrix}
\begin{pmatrix}
b_{11} & b_{12}\\
b_{21} & b_{22}
\end{pmatrix}
=
\begin{pmatrix}
a_{11} b_{11} + a_{12} b_{21} & a_{11} b_{12} + a_{12} b_{22} \\
a_{21} b_{11} + a_{22} b_{21} & a_{21} b_{12} + a_{22} b_{22}
\end{pmatrix} A B = ( a 11 a 21 a 12 a 22 ) ( b 11 b 21 b 12 b 22 ) = ( a 11 b 11 + a 12 b 21 a 21 b 11 + a 22 b 21 a 11 b 12 + a 12 b 22 a 21 b 12 + a 22 b 22 ) ベクトルの直積との関係 ¶ 2つのベクトルa , b \boldsymbol{a}, \boldsymbol{b} a , b のテンソル積
a ∘ b = a ⊗ b = a b T = ( a 1 a 2 ⋮ a n ) ( b 1 b 2 ⋯ b n ) = ( a 1 b 1 a 1 b 2 ⋯ a 1 b n a 2 b 1 a 2 b 2 ⋯ a 2 b n ⋮ ⋮ ⋱ ⋮ a n b 1 a n b 2 ⋯ a n b n ) \boldsymbol{a} \circ \boldsymbol{b}
= \boldsymbol{a} \otimes \boldsymbol{b}
= \boldsymbol{a} \boldsymbol{b}^T
= \begin{pmatrix}
a_1 \\ a_2 \\ \vdots \\ a_n
\end{pmatrix}
\begin{pmatrix}
b_1 & b_2 & \cdots & b_n
\end{pmatrix}
= \begin{pmatrix}
a_1 b_1 & a_1 b_2 & \cdots & a_1 b_n\\
a_2 b_1 & a_2 b_2 & \cdots & a_2 b_n\\
\vdots & \vdots & \ddots & \vdots \\
a_n b_1 & a_n b_2 & \cdots & a_n b_n
\end{pmatrix} a ∘ b = a ⊗ b = a b T = ⎝ ⎛ a 1 a 2 ⋮ a n ⎠ ⎞ ( b 1 b 2 ⋯ b n ) = ⎝ ⎛ a 1 b 1 a 2 b 1 ⋮ a n b 1 a 1 b 2 a 2 b 2 ⋮ a n b 2 ⋯ ⋯ ⋱ ⋯ a 1 b n a 2 b n ⋮ a n b n ⎠ ⎞ を直積 (direct product)あるいは外積 (outer product)という。
行列積と直積の関係
行列A , B A, B A , B のi i i 番目の列ベクトルをa i , b i \boldsymbol{a}_i, \boldsymbol{b}_i a i , b i とし、行ベクトルをa i T , b i T \boldsymbol{a}_i^T, \boldsymbol{b}_i^T a i T , b i T とする。このとき、
A T B = ∑ i = 1 n a i b i T A^T B = \sum^n_{i=1} \boldsymbol{a}_i \boldsymbol{b}_i^T A T B = i = 1 ∑ n a i b i T が成り立つ。この形式は計量経済学(回帰分析)の漸近正規性の証明などで多用される。
(例)A , B ∈ R 2 × 2 A, B \in \mathbb{R}^{2\times 2} A , B ∈ R 2 × 2 のとき、
A T B = ( a 11 a 21 a 12 a 22 ) ( b 11 b 12 b 21 b 22 ) = ( a 11 b 11 + a 21 b 21 a 11 b 12 + a 21 b 22 a 12 b 11 + a 22 b 21 a 12 b 12 + a 22 b 22 ) \begin{align}
A^T B &=
\begin{pmatrix}
a_{11} & a_{21}\\
a_{12} & a_{22}
\end{pmatrix}
\begin{pmatrix}
b_{11} & b_{12}\\
b_{21} & b_{22}
\end{pmatrix}
\\
&=
\begin{pmatrix}
a_{11} b_{11} + a_{21} b_{21} & a_{11} b_{12} + a_{21} b_{22}\\
a_{12} b_{11} + a_{22} b_{21} & a_{12} b_{12} + a_{22} b_{22}\\
\end{pmatrix}
\end{align} A T B = ( a 11 a 12 a 21 a 22 ) ( b 11 b 21 b 12 b 22 ) = ( a 11 b 11 + a 21 b 21 a 12 b 11 + a 22 b 21 a 11 b 12 + a 21 b 22 a 12 b 12 + a 22 b 22 ) であり、
a 1 = ( a 11 a 12 ) , b 1 T = ( b 11 b 12 ) a_1
= \begin{pmatrix}
a_{11} \\
a_{12}
\end{pmatrix}
, \hspace{1em}
b_1^T =
\begin{pmatrix}
b_{11} & b_{12}\\
\end{pmatrix} a 1 = ( a 11 a 12 ) , b 1 T = ( b 11 b 12 ) から
∑ i = 1 2 a i b i T = ( a 11 a 12 ) ( b 11 b 12 ) + ( a 21 a 22 ) ( b 21 b 22 ) = ( a 11 b 11 a 11 b 12 a 12 b 11 a 12 b 12 ) + ( a 21 b 21 a 21 b 22 a 22 b 21 a 22 b 22 ) \begin{align}
\sum^2_{i=1} \boldsymbol{a}_i \boldsymbol{b}_i^T
&= \begin{pmatrix}
a_{11} \\
a_{12}
\end{pmatrix}
\begin{pmatrix}
b_{11} & b_{12}
\end{pmatrix}
+ \begin{pmatrix}
a_{21} \\
a_{22}
\end{pmatrix}
\begin{pmatrix}
b_{21} & b_{22}
\end{pmatrix}
\\
&= \begin{pmatrix}
a_{11} b_{11} & a_{11} b_{12}\\
a_{12} b_{11} & a_{12} b_{12}
\end{pmatrix}
+ \begin{pmatrix}
a_{21} b_{21} & a_{21} b_{22}\\
a_{22} b_{21} & a_{22} b_{22}
\end{pmatrix}
\end{align} i = 1 ∑ 2 a i b i T = ( a 11 a 12 ) ( b 11 b 12 ) + ( a 21 a 22 ) ( b 21 b 22 ) = ( a 11 b 11 a 12 b 11 a 11 b 12 a 12 b 12 ) + ( a 21 b 21 a 22 b 21 a 21 b 22 a 22 b 22 ) であるため。
行列積との関係
行列の一部をベクトルで表して(=ブロック行列)、通常の行列積の定義をベクトルの積の形で表すこともできる
n n n 次元正方行列A , B A, B A , B のi i i 番目の列ベクトルをa i , b i \boldsymbol{a}_i, \boldsymbol{b}_i a i , b i とし、行ベクトルをa i T , b i T \boldsymbol{a}_i^T, \boldsymbol{b}_i^T a i T , b i T とする。このとき、
B A = ( b 1 T b 2 T ⋮ b n T ) ( a 1 , a 2 , ⋯ , a n ) = ( b 1 T a 1 b 1 T a 2 ⋯ b 1 T a n b 2 T a 1 b 2 T a 2 ⋯ b 2 T a n ⋮ ⋮ ⋮ b n T a 1 b n T a 2 ⋯ b n T a n ) \begin{align}
BA &=
\begin{pmatrix}
\boldsymbol{b}_{1}^T \\
\boldsymbol{b}_{2}^T \\
\vdots \\
\boldsymbol{b}_{n}^T
\end{pmatrix}
\begin{pmatrix}
\boldsymbol{a}_1, \boldsymbol{a}_2, \cdots, \boldsymbol{a}_n
\end{pmatrix}
=
\begin{pmatrix}
\boldsymbol{b}_{1}^T \boldsymbol{a}_1 & \boldsymbol{b}_{1}^T \boldsymbol{a}_2 & \cdots & \boldsymbol{b}_{1}^T \boldsymbol{a}_n\\
\boldsymbol{b}_{2}^T \boldsymbol{a}_1 & \boldsymbol{b}_{2}^T \boldsymbol{a}_2 & \cdots & \boldsymbol{b}_{2}^T \boldsymbol{a}_n\\
\vdots & \vdots & & \vdots\\
\boldsymbol{b}_{n}^T \boldsymbol{a}_1 & \boldsymbol{b}_{n}^T \boldsymbol{a}_2 & \cdots & \boldsymbol{b}_{n}^T \boldsymbol{a}_n\\
\end{pmatrix}
\end{align} B A = ⎝ ⎛ b 1 T b 2 T ⋮ b n T ⎠ ⎞ ( a 1 , a 2 , ⋯ , a n ) = ⎝ ⎛ b 1 T a 1 b 2 T a 1 ⋮ b n T a 1 b 1 T a 2 b 2 T a 2 ⋮ b n T a 2 ⋯ ⋯ ⋯ b 1 T a n b 2 T a n ⋮ b n T a n ⎠ ⎞ import numpy as np
A = np.array([
[1, 2],
[3, 4],
])
array([[10, 14],
[14, 20]])
行列と写像 ¶ 行列は写像である
(平岡和幸, & 堀玄. (2004). プログラミングのための線形代数. 株式会社 オーム社.)
例:ベクトルx x x に行列A A A を掛けてy y y とする
x x x をy y y に写す写像(≒関数)が行列A A A
連立一次方程式を行列で表すこともできる。
{ a 11 x 1 + a 12 x 2 + ⋯ + a 1 m x m = y 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 m x m = y 2 ⋮ a n 1 x 1 + a n 2 x 2 + ⋯ + a n m x m = y n \begin{cases}
\begin{align}
a_{11} x_1 + a_{12} x_2 + &\cdots + a_{1m} x_m = y_1\\
a_{21} x_1 + a_{22} x_2 + &\cdots + a_{2m} x_m = y_2\\
&\vdots\\
a_{n1} x_1 + a_{n2} x_2 + &\cdots + a_{nm} x_m = y_n\\
\end{align}
\end{cases} ⎩ ⎨ ⎧ a 11 x 1 + a 12 x 2 + a 21 x 1 + a 22 x 2 + a n 1 x 1 + a n 2 x 2 + ⋯ + a 1 m x m = y 1 ⋯ + a 2 m x m = y 2 ⋮ ⋯ + a nm x m = y n のような連立一次方程式は、
Undefined control sequence: \b at position 198: …, \hspace{1em}
\̲b̲{x} = \begin{pm…
A = \begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1m} \\
a_{21} & a_{22} & \cdots & a_{2m} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nm} \\
\end{pmatrix}
, \hspace{1em}
\b{x} = \begin{pmatrix}
x_1\\
x_2\\
\vdots\\
x_m
\end{pmatrix}
, \hspace{1em}
\b{y} = \begin{pmatrix}
y_1\\
y_2\\
\vdots\\
y_n
\end{pmatrix}を用いて
Undefined control sequence: \b at position 2: A\̲b̲{x} = \b{y}
A\b{x} = \b{y}と表すことができる。
行列の和 ¶ A ( B + C ) = A B + A C A(B+C) = AB + AC A ( B + C ) = A B + A C import numpy as np
A = np.array([
[1, 0],
[0, 0]
])
B = np.array([
[2, 0],
[0, 3]
])
C = np.array([
[0, -1],
[-1, 0]
])
array([[ 2, -1],
[ 0, 0]])
array([[ 2, -1],
[ 0, 0]])
べき乗 ¶ A A = A 2 A A A = A 3 \begin{align}
AA &= A^2\\
AAA &= A^3
\end{align} AA AAA = A 2 = A 3 A n + m = A n + A m ( A n ) m = A n m \begin{align}
A^{n+m} &= A^n + A^m\\
(A^n)^m &= A^{nm}
\end{align} A n + m ( A n ) m = A n + A m = A nm adomonition - Unknown Directive
$$
A =
\begin{pmatrix}
1 & 0\\
0 & 0
\end{pmatrix}
\hspace{1em}
A^2 =
\begin{pmatrix}
1 & 0\\
0 & 0
\end{pmatrix}
\begin{pmatrix}
1 & 0\\
0 & 0
\end{pmatrix}
=
\begin{pmatrix}
1 & 0\\
0 & 0
\end{pmatrix}
$$
$$
B =
\begin{pmatrix}
2 & 0\\
0 & 3
\end{pmatrix}
\hspace{1em}
B^2 =
\begin{pmatrix}
2 & 0\\
0 & 3
\end{pmatrix}
\begin{pmatrix}
2 & 0\\
0 & 3
\end{pmatrix}
=
\begin{pmatrix}
4 & 0\\
0 & 9
\end{pmatrix}
$$ 普通の数取は異なる計算規則 ¶ ( A + B ) 2 = A 2 + A B + B A + B 2 ( A + B ) ( A − B ) = A 2 − A B + B A − B 2 ( A B ) 2 = A B A B \begin{align}
(A + B)^2 &= A^2 + AB + BA + B^2\\
(A + B) (A - B) &= A^2 - AB + BA - B^2\\
(AB)^2 &= ABAB
\end{align} ( A + B ) 2 ( A + B ) ( A − B ) ( A B ) 2 = A 2 + A B + B A + B 2 = A 2 − A B + B A − B 2 = A B A B adomonition - Unknown Directive
$$
A =
\begin{pmatrix}
1 & 0\\
0 & 0
\end{pmatrix}
\hspace{1em}
B =
\begin{pmatrix}
2 & 0\\
0 & 3
\end{pmatrix}
$$
$$
\begin{align}
AB &=
\begin{pmatrix}
1 & 0\\
0 & 0
\end{pmatrix}
\begin{pmatrix}
2 & 0\\
0 & 3
\end{pmatrix}
=
\begin{pmatrix}
2 & 0\\
0 & 0
\end{pmatrix}
\\
(AB)^2 &=
\begin{pmatrix}
4 & 0\\
0 & 0
\end{pmatrix}
\end{align}
$$ 左右を入れ替えなければどこにカッコをつけてもおなじ ¶ 例えばベクトルx = ( x 1 , x 2 , … , x n ) \boldsymbol{x} = (x_1, x_2, \dots, x_n) x = ( x 1 , x 2 , … , x n ) について、x x T x \boldsymbol{x} \boldsymbol{x}^T \boldsymbol{x} x x T x は( x x T ) x (\boldsymbol{x} \boldsymbol{x}^T) \boldsymbol{x} ( x x T ) x と捉えるよりx ( x T x ) \boldsymbol{x} (\boldsymbol{x}^T \boldsymbol{x}) x ( x T x ) としたほうが楽
( x x T ) x = ( x 1 2 x 1 x 2 ⋯ x 1 x n x 2 x 1 x 2 2 ⋯ x 2 x n ⋮ ⋮ ⋮ x n x 1 x n x 2 ⋯ x n 2 ) ( x 1 x 2 ⋮ x n ) = ( x 1 2 ⋅ x 1 + x 1 x 2 ⋅ x 2 + ⋯ + x 1 x n ⋅ x n x 2 x 1 ⋅ x 1 + x 2 2 ⋅ x 2 + ⋯ + x 2 x n ⋅ x n ⋮ x n x 1 ⋅ x 1 + x n x 2 ⋅ x 2 + ⋯ + x n 2 ⋅ x n ) = ( x 1 x 2 ⋮ x n ) ∑ i = 1 n x i 2 (\boldsymbol{x} \boldsymbol{x}^T) \boldsymbol{x}
=
\begin{pmatrix}
x_1^2 & x_1 x_2 & \cdots & x_1 x_n\\
x_2 x_1 & x_2^2 & \cdots & x_2 x_n\\
\vdots & \vdots & & \vdots\\
x_n x_1 & x_n x_2 & \cdots & x_n^2
\end{pmatrix}
\begin{pmatrix}
x_1\\
x_2\\
\vdots\\
x_n
\end{pmatrix}
=
\begin{pmatrix}
x_1^2 \cdot x_1 + x_1 x_2 \cdot x_2 + \cdots + x_1 x_n \cdot x_n\\
x_2 x_1 \cdot x_1 + x_2^2 \cdot x_2 + \cdots + x_2 x_n \cdot x_n\\
\vdots\\
x_n x_1 \cdot x_1 + x_n x_2 \cdot x_2 + \cdots + x_n^2 \cdot x_n
\end{pmatrix}
=
\begin{pmatrix}
x_1\\
x_2\\
\vdots\\
x_n
\end{pmatrix}
\sum^n_{i=1} x_i^2 ( x x T ) x = ⎝ ⎛ x 1 2 x 2 x 1 ⋮ x n x 1 x 1 x 2 x 2 2 ⋮ x n x 2 ⋯ ⋯ ⋯ x 1 x n x 2 x n ⋮ x n 2 ⎠ ⎞ ⎝ ⎛ x 1 x 2 ⋮ x n ⎠ ⎞ = ⎝ ⎛ x 1 2 ⋅ x 1 + x 1 x 2 ⋅ x 2 + ⋯ + x 1 x n ⋅ x n x 2 x 1 ⋅ x 1 + x 2 2 ⋅ x 2 + ⋯ + x 2 x n ⋅ x n ⋮ x n x 1 ⋅ x 1 + x n x 2 ⋅ x 2 + ⋯ + x n 2 ⋅ x n ⎠ ⎞ = ⎝ ⎛ x 1 x 2 ⋮ x n ⎠ ⎞ i = 1 ∑ n x i 2 x ( x T x ) = ( x 1 x 2 ⋮ x n ) ∑ i = 1 n x i 2 \boldsymbol{x} (\boldsymbol{x}^T \boldsymbol{x})
=
\begin{pmatrix}
x_1\\
x_2\\
\vdots\\
x_n
\end{pmatrix}
\sum^n_{i=1} x_i^2 x ( x T x ) = ⎝ ⎛ x 1 x 2 ⋮ x n ⎠ ⎞ i = 1 ∑ n x i 2 ( A T ) T = A (A^T)^T = A ( A T ) T = A
( c A + d B ) T = c A T + d B T (cA + dB)^T = cA^T + dB^T ( c A + d B ) T = c A T + d B T
( A B ) T = B T A T (AB)^T = B^T A^T ( A B ) T = B T A T
( A T ) − 1 = ( A − 1 ) T (A^T)^{-1} = (A^{-1})^T ( A T ) − 1 = ( A − 1 ) T
∣ A T ∣ = ∣ A ∣ |A^T| = |A| ∣ A T ∣ = ∣ A ∣
対称行列 ¶ を満たす正方行列A A A を対称行列 (symmetric matrix)という
A B = B A AB = BA A B = B A が成り立つとき、A A A とB B B は可換 であるという
import numpy as np
A = np.array([
[1, 0],
[0, 1]
])
B = np.array([
[1, 1],
[1, 1]
])
(A @ B == B @ A).all()ブロック行列 ¶ 行列をいくつかのブロック(小行列)に分けて扱うことがある
A = ( 1 2 3 ⋮ 4 5 6 7 ⋮ 8 … … … … … 9 10 11 ⋮ 12 ) = ( A 11 A 12 A 21 A 22 ) A=\left(\begin{array}{ccccc}
1 & 2 & 3 & \vdots & 4 \\
5 & 6 & 7 & \vdots & 8 \\
\ldots & \ldots & \ldots & \ldots & \ldots\\
9 & 10 & 11 & \vdots & 12
\end{array}\right)=\left(\begin{array}{ll}
A_{11} & A_{12} \\
A_{21} & A_{22}
\end{array}\right) A = ⎝ ⎛ 1 5 … 9 2 6 … 10 3 7 … 11 ⋮ ⋮ … ⋮ 4 8 … 12 ⎠ ⎞ = ( A 11 A 21 A 12 A 22 ) 特に行ベクトルや列ベクトルに分けると扱いやすい
A B = ( a 1 a 2 ⋮ a m ) ( b 1 ′ ⋯ b l ′ ) = ( a 1 b 1 ′ a 1 b 2 ′ ⋯ a 1 b ι ′ a 2 b 1 ′ a 2 b 2 ′ ⋯ a 2 b l ′ ⋮ ⋮ ⋮ a m b 1 ′ a m b 2 ′ ⋯ a m b l ′ ) A B=\left(\begin{array}{c}
\boldsymbol{a}_1 \\
\boldsymbol{a}_2 \\
\vdots \\
\boldsymbol{a}_m
\end{array}\right)\left(\begin{array}{lll}
\boldsymbol{b}_1^{\prime} & \cdots & \boldsymbol{b}_l{ }^{\prime}
\end{array}\right)=\left(\begin{array}{cccc}
\boldsymbol{a}_1 \boldsymbol{b}_1^{\prime} & \boldsymbol{a}_1 \boldsymbol{b}_2^{\prime} & \cdots & \boldsymbol{a}_1 \boldsymbol{b}_\iota{ }^{\prime} \\
\boldsymbol{a}_2 \boldsymbol{b}_1^{\prime} & \boldsymbol{a}_2 \boldsymbol{b}_2^{\prime} & \cdots & \boldsymbol{a}_2 \boldsymbol{b}_l{ }^{\prime} \\
\vdots & \vdots & & \vdots \\
\boldsymbol{a}_m \boldsymbol{b}_1^{\prime} & \boldsymbol{a}_m \boldsymbol{b}_2^{\prime} & \cdots & \boldsymbol{a}_m \boldsymbol{b}_l{ }^{\prime}
\end{array}\right) A B = ⎝ ⎛ a 1 a 2 ⋮ a m ⎠ ⎞ ( b 1 ′ ⋯ b l ′ ) = ⎝ ⎛ a 1 b 1 ′ a 2 b 1 ′ ⋮ a m b 1 ′ a 1 b 2 ′ a 2 b 2 ′ ⋮ a m b 2 ′ ⋯ ⋯ ⋯ a 1 b ι ′ a 2 b l ′ ⋮ a m b l ′ ⎠ ⎞ A B = ( a 1 a 2 ⋮ a m ) B = ( a 1 B a 2 B ⋮ a m B ) A B=\left(\begin{array}{c}
\boldsymbol{a}_1 \\
\boldsymbol{a}_2 \\
\vdots \\
\boldsymbol{a}_m
\end{array}\right) B=\left(\begin{array}{c}
\boldsymbol{a}_1 B \\
\boldsymbol{a}_2 B \\
\vdots \\
\boldsymbol{a}_m B
\end{array}\right) A B = ⎝ ⎛ a 1 a 2 ⋮ a m ⎠ ⎞ B = ⎝ ⎛ a 1 B a 2 B ⋮ a m B ⎠ ⎞ A B = A ( b 1 ′ b 2 ′ ⋯ b l ′ ) = ( A b 1 ′ A b 2 ′ ⋯ A b l ′ ) A B=A\left(\begin{array}{llll}
\boldsymbol{b}_1{ }^{\prime} & \boldsymbol{b}_2{ }^{\prime} & \cdots & \boldsymbol{b}_l{ }^{\prime}
\end{array}\right)=\left(\begin{array}{llll}
A \boldsymbol{b}_1{ }^{\prime} & A \boldsymbol{b}_2{ }^{\prime} & \cdots & A \boldsymbol{b}_l{ }^{\prime}
\end{array}\right) A B = A ( b 1 ′ b 2 ′ ⋯ b l ′ ) = ( A b 1 ′ A b 2 ′ ⋯ A b l ′ ) A B = ( a 1 ′ a 2 ′ ⋯ a n ′ ) ( b 1 b 2 ⋮ b n ) = ( a 1 ′ b 1 + a 2 ′ b 2 + ⋯ + a n ′ b n ) A B=\left(\begin{array}{llll}
\boldsymbol{a}_1^{\prime} & \boldsymbol{a}_2^{\prime} & \cdots & \boldsymbol{a}_n{ }^{\prime}
\end{array}\right)\left(\begin{array}{c}
\boldsymbol{b}_1 \\
\boldsymbol{b}_2 \\
\vdots \\
\boldsymbol{b}_n
\end{array}\right)=\left(\boldsymbol{a}_1^{\prime} \boldsymbol{b}_1+\boldsymbol{a}_2^{\prime} \boldsymbol{b}_2+\cdots+\boldsymbol{a}_n{ }^{\prime} \boldsymbol{b}_n\right) A B = ( a 1 ′ a 2 ′ ⋯ a n ′ ) ⎝ ⎛ b 1 b 2 ⋮ b n ⎠ ⎞ = ( a 1 ′ b 1 + a 2 ′ b 2 + ⋯ + a n ′ b n ) ブロック行列の積 ¶ 一般に、積が定義可能な行列A , B A, B A , B に対して
A = ( A 11 A 12 A 21 A 22 ) , B = ( B 11 B 12 B 21 B 22 ) A =
\begin{pmatrix}
A_{11} & A_{12}\\
A_{21} & A_{22}
\end{pmatrix},
\hspace{2em}
B =
\begin{pmatrix}
B_{11} & B_{12}\\
B_{21} & B_{22}
\end{pmatrix} A = ( A 11 A 21 A 12 A 22 ) , B = ( B 11 B 21 B 12 B 22 ) と分割するとする。ここでA 11 ∈ R s × r , A 12 ∈ R s × n − r , A 21 ∈ R m − s × r , A 22 ∈ R m − s × n − r A_{11} \in \mathbb{R}^{s \times r}, A_{12} \in \mathbb{R}^{s \times n-r}, A_{21} \in \mathbb{R}^{m-s \times r}, A_{22} \in \mathbb{R}^{m-s \times n-r} A 11 ∈ R s × r , A 12 ∈ R s × n − r , A 21 ∈ R m − s × r , A 22 ∈ R m − s × n − r で、
B 11 ∈ R r × t , B 12 ∈ R r × l − t , B 21 ∈ R n − r × t , B 22 ∈ R n − r × l − t B_{11}\in\mathbb{R}^{r \times t}, B_{12}\in\mathbb{R}^{r \times l-t}, B_{21}\in\mathbb{R}^{n-r \times t}, B_{22}\in\mathbb{R}^{n-r \times l-t} B 11 ∈ R r × t , B 12 ∈ R r × l − t , B 21 ∈ R n − r × t , B 22 ∈ R n − r × l − t である。
このとき、
A B = ( A 11 A 12 A 21 A 22 ) ( B 11 B 12 B 21 B 22 ) = ( A 11 B 11 + A 12 B 21 A 11 B 12 + A 12 B 22 A 21 B 11 + A 22 B 21 A 21 B 12 + A 22 B 22 ) A B =
\begin{pmatrix}
A_{11} & A_{12}\\
A_{21} & A_{22}
\end{pmatrix}
\begin{pmatrix}
B_{11} & B_{12}\\
B_{21} & B_{22}
\end{pmatrix}
=
\begin{pmatrix}
A_{11} B_{11}+A_{12} B_{21} & A_{11} B_{12}+A_{12} B_{22} \\
A_{21} B_{11}+A_{22} B_{21} & A_{21} B_{12}+A_{22} B_{22}
\end{pmatrix} A B = ( A 11 A 21 A 12 A 22 ) ( B 11 B 21 B 12 B 22 ) = ( A 11 B 11 + A 12 B 21 A 21 B 11 + A 22 B 21 A 11 B 12 + A 12 B 22 A 21 B 12 + A 22 B 22 ) が成立する。
対角以外のブロック(A 12 , A 21 , B 12 , B 21 A_{12}, A_{21}, B_{12}, B_{21} A 12 , A 21 , B 12 , B 21 )が零行列である場合
( A 11 O O A 22 ) ( B 11 O O B 22 ) = ( A 11 B 11 O O A 22 B 22 ) \begin{pmatrix}
A_{11} & O\\
O & A_{22}
\end{pmatrix}
\begin{pmatrix}
B_{11} & O\\
O & B_{22}
\end{pmatrix}
=
\begin{pmatrix}
A_{11} B_{11} & O \\
O & A_{22} B_{22}
\end{pmatrix} ( A 11 O O A 22 ) ( B 11 O O B 22 ) = ( A 11 B 11 O O A 22 B 22 ) となる
対角以外の部分に零でないブロック∗ * ∗ があっても、次のようになる
( A 11 O ∗ A 22 ) ( B 11 O ∗ B 22 ) = ( A 11 B 11 O ∗ ′ A 22 B 22 ) ( A 11 ∗ O A 22 ) ( B 11 ∗ O B 22 ) = ( A 11 B 11 ∗ ′ O A 22 B 22 ) \begin{aligned}
\begin{pmatrix}
A_{11} & O\\
* & A_{22}
\end{pmatrix}
\begin{pmatrix}
B_{11} & O\\
* & B_{22}
\end{pmatrix}
&=
\begin{pmatrix}
A_{11} B_{11} & O \\
*' & A_{22} B_{22}
\end{pmatrix}
\\
\begin{pmatrix}
A_{11} & *\\
O & A_{22}
\end{pmatrix}
\begin{pmatrix}
B_{11} & *\\
O & B_{22}
\end{pmatrix}
&=
\begin{pmatrix}
A_{11} B_{11} & *' \\
O & A_{22} B_{22}
\end{pmatrix}
\end{aligned} ( A 11 ∗ O A 22 ) ( B 11 ∗ O B 22 ) ( A 11 O ∗ A 22 ) ( B 11 O ∗ B 22 ) = ( A 11 B 11 ∗ ′ O A 22 B 22 ) = ( A 11 B 11 O ∗ ′ A 22 B 22 ) ここで左辺の∗ * ∗ はブロックのサイズが合えばなんでもよいことを意味し、右辺の∗ ′ *' ∗ ′ はそのサイズのある定まった行列を表す(左辺と右辺で∗ * ∗ の部分が等しいわけではない)
import numpy as np
np.array([
[1, 2, 1, 0],
[3, 4, 0, 1],
[0, 0, 3, 1],
[0, 0, 5, 1]
]) @ np.array([
[1, 1, 1, 0],
[2, 3, 0, 1],
[0, 0, 2, 0],
[0, 0, 0, 1]
])array([[ 5, 7, 3, 2],
[11, 15, 3, 5],
[ 0, 0, 6, 1],
[ 0, 0, 10, 1]])
np.array([
[1, 2],
[3, 4],
]) @ np.array([
[1, 1],
[2, 3],
])array([[ 5, 7],
[11, 15]])
例:
M = ( I A O I ) M =
\begin{pmatrix}
I & A\\
O & I
\end{pmatrix} M = ( I O A I ) という行列があるとき、
M 2 = ( I A ′ O I ) M^2 =
\begin{pmatrix}
I & A'\\
O & I
\end{pmatrix} M 2 = ( I O A ′ I ) このA ′ A' A ′ の部分はA 2 A^2 A 2 ではなく2 A 2A 2 A
import numpy as np
M = np.array([
[1, 0, 1, 2],
[0, 1, 3, 4],
[0, 0, 1, 0],
[0, 0, 0, 1]
])
M @ Marray([[1, 0, 2, 4],
[0, 1, 6, 8],
[0, 0, 1, 0],
[0, 0, 0, 1]])
# A^2
A = np.array([
[1, 2],
[3, 4],
])
A @ Aarray([[ 7, 10],
[15, 22]])
import numpy as np
M = np.array([
[1, 0, 1, 2],
[0, 1, 3, 4],
[0, 0, 1, 0],
[0, 0, 0, 1]
])
M @ M @ Marray([[ 1, 0, 3, 6],
[ 0, 1, 9, 12],
[ 0, 0, 1, 0],
[ 0, 0, 0, 1]])
import numpy as np
M = np.array([
[1, 0, 0, 1, 2, 3],
[0, 1, 0, 4, 5, 6],
[0, 0, 1, 7, 8, 9],
[0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 1]
])
M @ Marray([[ 1, 0, 0, 2, 4, 6],
[ 0, 1, 0, 8, 10, 12],
[ 0, 0, 1, 14, 16, 18],
[ 0, 0, 0, 1, 0, 0],
[ 0, 0, 0, 0, 1, 0],
[ 0, 0, 0, 0, 0, 1]])
import numpy as np
M = np.array([
[0, 0, 1, 2],
[0, 0, 3, 4],
[1, 0, 0, 0],
[0, 1, 0, 0]
])
M @ Marray([[1, 2, 0, 0],
[3, 4, 0, 0],
[0, 0, 1, 2],
[0, 0, 3, 4]])
import numpy as np
M = np.array([
[0, 0, -1, 0],
[0, 0, 0, 1],
[1, 0, 0, 0],
[0, -1, 0, 0]
])
M @ Marray([[-1, 0, 0, 0],
[ 0, -1, 0, 0],
[ 0, 0, -1, 0],
[ 0, 0, 0, -1]])
import numpy as np
M = np.array([
[0, 0, 0, -1],
[0, 0, -1, 0],
[1, 0, 0, 0],
[0, 1, 0, 0]
])
M @ Marray([[ 0, -1, 0, 0],
[-1, 0, 0, 0],
[ 0, 0, 0, -1],
[ 0, 0, -1, 0]])
基本変形 ¶ 行基本変形 ¶ 2つの行を入れ替える
ある行をc c c 倍する(c ≠ 0 c \neq 0 c = 0 )
ある行をc c c 倍して他の行に加える
列基本変形 ¶ 2つの列を入れ替える
ある列をc c c 倍する(c ≠ 0 c \neq 0 c = 0 )
ある列をc c c 倍して他の列に加える