『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

列空間と行空間

 

列空間

これまで学んできたように、$\mathbb{R}^n$ に属するベクトル $\boldsymbol{x}$ の行列 $A$ による線形変換 $A\boldsymbol{x}$ は、$A$ を構成する列ベクトルの線形結合として表せます。後述する行空間と区別するために、$A\boldsymbol{x}$ をあらためて 列空間 という名称で定義して、$\mathbb{C}(A)$ と表記することにします。

正方行列の列空間

$\boldsymbol{x}$ が $\mathbb{R}^3$ に属するとき、$3\times 3$ の正方行列 $A$ の列空間は
 \[\begin{bmatrix}a_{11}&a_{12}&a_{13}\\a_{21}&a_{22}&a_{23}\\a_{31}&a_{32}&a_{33}\end{bmatrix}\begin{bmatrix}x\\y\\z\end{bmatrix}=x\begin{bmatrix}a_{11}\\a_{21}\\a_{31}\end{bmatrix}+y\begin{bmatrix}a_{12}\\a_{22}\\a_{32}\end{bmatrix}+z\begin{bmatrix}a_{13}\\a_{23}\\a_{33}\end{bmatrix}\tag{1}\]
のように 3 本のベクトルの線形結合で表せます。$A$ に含まれる独立な列ベクトル (基底ベクトル) の数、すなわち $A$ の階数 $\mathrm{rank}A$ によって変換の性質は異なります。
 
  $\mathrm{rank}A=3$  $\mathbb{R}^3$ → $\mathbb{R}^3$ 全体
  $\mathrm{rank}A=2$  $\mathbb{R}^3$ → $\mathbb{R}^3$ 内の平面
  $\mathrm{rank}A=1$  $\mathbb{R}^3$ → $\mathbb{R}^3$ 内の直線
 
いずれにしても、$3\times 3$ 行列の列空間は $\mathbb{R}^3$ の部分空間であり、連立方程式 $A\boldsymbol{x}=\boldsymbol{b}$ は $\boldsymbol{b}$ が部分空間に含まれるときに解をもちます。

$A$ の階数が $3$ であれば必ず解をもちますが、階数が $3$ より小さいときには、$A\boldsymbol{x}=\boldsymbol{b}$ を満たすような $\boldsymbol{b}$ は稀であることがわかります (特定の平面や直線上に $\boldsymbol{b}$ が含まれていなければなりません)。
 
試しに階数 $2$ の正方行列と $3$ 次元ベクトル
 \[A=\begin{bmatrix}1&3&0\\1&3&1\\2&6&0\end{bmatrix},\ \quad \boldsymbol{b}=\begin{bmatrix}2\\5\\1\end{bmatrix}\tag{2}\]
を定義して、$A\boldsymbol{x}=\boldsymbol{b}$ の解の存在を調べてみましょう。ガウス・ジョルダンの消去法を使います。拡大係数行列
 \[\begin{bmatrix}1&3&0&2\\1&3&1&5\\2&6&0&1\end{bmatrix}\tag{3}\]
をつくって、$2$ 行目から $1$ 行目を引いて、$3$ 行目から $1$ 行目の $2$ 倍を引くと、
 \[\begin{bmatrix}1&3&0&2\\0&0&1&3\\0&0&0&-3\end{bmatrix}\tag{4}\]
$3$ 行目は $0=-3$ という (矛盾した) 等式を表すので、この連立方程式は解をもたないことがわかります。

矩形行列の列空間

$3\times 2$ の矩形行列
 \[A=\begin{bmatrix}1&1\\1&0\\5&3\end{bmatrix}\tag{5}\]
は $\mathbb{R}^2$ を $\mathbb{R}^3$ 内の平面に写します。
 \[\begin{bmatrix}1&1\\1&0\\5&3\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}=x\begin{bmatrix}1\\1\\5\end{bmatrix}+y\begin{bmatrix}1\\0\\3\end{bmatrix}\tag{6}\]
一般に、$m\times n$ の矩形行列は $\mathbb{R}^n$ を $\mathbb{R}^m$ 内の部分空間に写します ($m\times n$ の矩形行列の列空間は $\mathbb{R}^m$ の部分空間です)。

行空間

$A$ の転置行列 $A^T$ の列空間を 行空間 とよび、$\mathbb{C}(A^T)$ で表します。$A$ が $n\times n$ の正方行列であれば、列空間 $\mathbb{C}(A)$ と行空間 $\mathbb{C}(A^T)$ はともに $\mathbb{R}^n$ の部分空間ですが、$A$ が $m\times n$ の矩形行列であれば、列空間 $\mathbb{C}(A)$ は $\mathbb{R}^m$ の部分空間、行空間 $\mathbb{C}(A^T)$ は $\mathbb{R}^n$ の部分空間となります。たとえば $3\times 2$ の矩形行列
 \[A=\begin{bmatrix}1&4\\2&5\\3&6\end{bmatrix}\tag{7}\]
について、列空間は
 \[\mathbb{C}(A)=\begin{bmatrix}1&4\\2&5\\3&6\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}=x\begin{bmatrix}1\\2\\3\end{bmatrix}+y\begin{bmatrix}4\\5\\6\end{bmatrix}\tag{8}\]
と表せるので $\mathbb{R}^3$ の部分空間 (平面) となります。行空間は
 \[\mathbb{C}(A^T)=\begin{bmatrix}1&2&3\\4&5&6\end{bmatrix}\begin{bmatrix}x\\y\\z\end{bmatrix}=x\begin{bmatrix}1\\4\end{bmatrix}+y\begin{bmatrix}2\\5\end{bmatrix}+z\begin{bmatrix}3\\6\end{bmatrix}\tag{9}\]
と表せます。$3$ 本の列ベクトルのうち $2$ 本を基底に選んで
 \[\mathbb{C}(A^T)=s\begin{bmatrix}1\\4\end{bmatrix}+t\begin{bmatrix}2\\5\end{bmatrix}\tag{10}\]
のように書き直すことができます。この式は $\mathbb{R}^2$ 全体を表しています ($\mathbb{R}^2$ 自身も $\mathbb{R}^2$ の部分空間です)。

scipy.linalg.orth()

scipy.linalg.orth(A) は A の列空間を張るための直交基底を生成します。たとえば階数 2 の行列を渡すと、2 つの基底ベクトルを並べた行列を返します:

# phthon_column_row_space

# In[1]

import numpy as np
from scipy import linalg

# rank2の行列
A = np.array([[2, 0, 0],
              [0, 3, 1],
              [0, 0, 0]])

# C(A)を張る基底を生成
CA = linalg.orth(A)

print(CA)
# [[0. 1.]
#  [1. 0.]
#  [0. 0.]]

 A の転置行列を渡すと、行空間を張る基底を返します。

# In[2]

# C(A^T)を張る基底を生成
CAT = linalg.orth(A.T)

print(CAT)
# [[ 0.          1.        ]
#  [-0.9486833   0.        ]
#  [-0.31622777  0.        ]]

 

コメント

  1. HNaito より:

    下記は誤植と思われますので、ご確認ください。
    (2)式の下の文章で、Ax=bが解の存在 → Ax=bの解の存在