#線形代数
理系大学で絶対に習う線形代数をわかりやすく、かつ論理的にまとめる。ちなみにそれをPythonで実装。たまに、Juliaで実装するかも。。。
・Pythonで動かして学ぶ!あたらしい数学の教科書 -機械学習・深層学習に必要な基礎知識-
・世界基準MIT教科書 ストラング線形代数イントロダクション
を基に線形代数を理解し、pythonで実装。
#環境
・JupyterNotebook
・言語:Python3, Julia1.4.0
#行列
行列について、少し深く触れてみる。基本的に、
A x = b
という、形にするのがスタンダード
###行列について、
行列には、行と列が存在する。
・横に並ぶのが、行
・盾に並ぶのが、列
いままで、
u = (1, 2, 3)のようにあらわしてきたのは、列ベクトルのことである。
行ベクトル : u = [1, 2, 3]
列ベクトル : u = (1, 2, 3)
とする。
本来であれば、以下のように表記しなければならない。
u =
\begin{bmatrix}
1 \\
2 \\
3
\end{bmatrix}
ただし、この記事はマークダウン方式により、めんどくさいので今まで通りに記述する。
###線形方程式とベクトル
ex)連立方程式について
\begin{matrix}
x - 2y = 1 \\
3x + 2y = 11
\end{matrix}
を列ベクトルで考える。(= 線形的思考)
線形方程式のメリットは負数の指揮を一つの式で表すことができること。
以下のように変形できる、
x
\begin{bmatrix}
1 \\
3
\end{bmatrix}
+
y
\begin{bmatrix}
-2 \\
2
\end{bmatrix}
=
\begin{bmatrix}
1 \\
11
\end{bmatrix}
この時、
u =
\begin{bmatrix}
1 \\
3
\end{bmatrix}
,
v =
\begin{bmatrix}
-2 \\
2
\end{bmatrix}
,
b =
\begin{bmatrix}
1 \\
11
\end{bmatrix}
とおける。これは、u, vについてまとめてAとするとき、以下のようにAx=bの形で書くことができる。
Ax =
\begin{bmatrix}
1 & -2\\
3 & 2
\end{bmatrix}
\begin{bmatrix}
x\\
y
\end{bmatrix}
=
\begin{bmatrix}
1 \\
11
\end{bmatrix}
= b
となる。この線形方程式で、あてはまるx, yを考える必要がある。
ちなみ解析学的に考えると、直線同士の交点を示す。
#行列の計算(プログラム)
a =
\begin{bmatrix}
0 & 1 & 2 \\
1 & 2 & 3
\end{bmatrix}
,
b =
\begin{bmatrix}
2 & 1 \\
2 & 1\\
2 & 1
\end{bmatrix}
とする。行列の計算を行う。
###Pythonのコード
import numpy as np
a = ([[0, 1 ,2],
[1, 2, 3]])
b = ([[2, 1],
[2, 1],
[2, 1]])
print(np.dot(a, b))
#=>[[ 6 3]
# [12 6]]
#Juliaのコード
using LinearAlgebra
a = [0 1 2; 1 2 3]
b = [2 1; 2 1; 2 1]
a*b
#=>2×2 Array{Int64,2}:
# 6 3
# 12 6
前回のコメントで、LinearAlgebra
モジュールに関することがあったので今回はそれを使って簡単にしてみた。中身の仕組みを理化したい方はモジュールなしでぜひやってほしい。計算合わせにはモジュール使用いいかもね。