行列#
行列はベクトルを集めたもの
行列積#
とすると、行列積(matrix multiplication)は
ベクトルの直積との関係#
2つのベクトル
を直積(direct product)あるいは外積(outer product)という。
行列
が成り立つ。この形式は計量経済学(回帰分析)の漸近正規性の証明などで多用される。
(例)
であり、
から
であるため。
行列の一部をベクトルで表して(=ブロック行列)、通常の行列積の定義をベクトルの積の形で表すこともできる
import numpy as np
A = np.array([
[1, 2],
[3, 4],
])
(A.T @ A).T
array([[10, 14],
[14, 20]])
行列と写像#
行列は写像である
(平岡和幸, & 堀玄. (2004). プログラミングのための線形代数. 株式会社 オーム社.)
例:ベクトル
連立一次方程式を行列で表すこともできる。
のような連立一次方程式は、
を用いて
と表すことができる。
行列の計算規則#
行列の和#
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]
])
A @ (B + C)
array([[ 2, -1],
[ 0, 0]])
A @ B + A @ C
array([[ 2, -1],
[ 0, 0]])
べき乗#
普通の数取は異なる計算規則#
左右を入れ替えなければどこにカッコをつけてもおなじ#
例えばベクトル
行列の転置#
行列の転置の性質
対称行列#
を満たす正方行列
可換#
import numpy as np
A = np.array([
[1, 0],
[0, 1]
])
B = np.array([
[1, 1],
[1, 1]
])
(A @ B == B @ A).all()
True
ブロック行列#
行列をいくつかのブロック(小行列)に分けて扱うことがある
特に行ベクトルや列ベクトルに分けると扱いやすい
ブロック行列の積#
一般に、積が定義可能な行列
と分割するとする。ここで
このとき、
が成立する。
対角以外のブロック(
となる
対角以外の部分に零でないブロック
ここで左辺の
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]])
例:
という行列があるとき、
この
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
array([[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 @ A
array([[ 7, 10],
[15, 22]])
2 * A
array([[2, 4],
[6, 8]])
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 @ M
array([[ 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 @ M
array([[ 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 @ M
array([[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 @ M
array([[-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 @ M
array([[ 0, -1, 0, 0],
[-1, 0, 0, 0],
[ 0, 0, 0, -1],
[ 0, 0, -1, 0]])
基本変形#
行基本変形#
2つの行を入れ替える
ある行を
倍する( )ある行を
倍して他の行に加える
列基本変形#
2つの列を入れ替える
ある列を
倍する( )ある列を
倍して他の列に加える