Posted at

Numpyで実装する線形代数の行列

自分用のメモも兼ねて、基礎的な行列の足し算と掛け算などをNumpyで実装してみたメモです。


行列の足し算

同じ行と列同士の足し算

\begin{pmatrix}

2 & 4 \\
0 & 4 \\
7 & 9 \\
3 & 7
\end{pmatrix}
+
\begin{pmatrix}
9 & 2 \\
4 & 1 \\
1 & 7 \\
0 & 2
\end{pmatrix}
=
\begin{pmatrix}
11 & 6 \\
4 & 5 \\
8 & 16 \\
3 & 9
\end{pmatrix}

それぞれが違う行と列では計算はできない

2 x 3の行列と4 x 2の行列の足し算は不可能

\begin{pmatrix}

1 & 3 & 7 \\
2 & 9 & 0 \\
\end{pmatrix}

+

\begin{pmatrix}
9 & 2 \\
4 & 1 \\
1 & 7 \\
0 & 2
\end{pmatrix}

上記の行列の足し算をnumpyで実装すると以下のようになります。

import numpy as np

arr1 = np.array([[2, 4], [0, 4], [7, 9], [3, 7]])
arr2 = np.array([[9, 2], [4, 1], [1, 7], [0, 2]])

print(arr1)
# [[2 4]
# [0 4]
# [7 9]
# [3 7]]

print(arr2)
# [[9 2]
# [4 1]
# [1 7]
# [0 2]]

result = arr1+arr2
print(result)
# [[11 6]
# [ 4 5]
# [ 8 16]
# [ 3 9]]


行列のスカラー倍

それぞれの値を定数倍する。

6

\times
\begin{pmatrix}
1 & 3 & 7 \\
2 & 9 & 0 \\
\end{pmatrix}

=
\begin{pmatrix}
6 & 18 & 42 \\
12 & 54 & 0 \\
\end{pmatrix}

上記の行列のスカラー倍の式をnumpyで実装すると以下のようになります。

import numpy as np

arr1 = np.array([[1, 3, 7], [2, 9, 0]])
print(arr1)
# [[1 3 7]
# [2 9 0]]

result = arr1 * 6
print(result)
# [[ 6 18 42]
# [12 54 0]]

\begin{pmatrix}

6 & 3 \\
0 & 1 \\
\end{pmatrix}
\div
3
=
\begin{pmatrix}
6 & 3 \\
0 & 1 \\
\end{pmatrix}
\times
\frac{1}{3}
=
\begin{pmatrix}
2 & 1 \\
0 & 1/3 \\
\end{pmatrix}

import numpy as np

arr1 = np.array([[6, 3], [0, 1]])
print(arr1)
# [[6 3]
# [0 1]]

result = arr1 / 3
print(result)
# [[ 2 1]
# [ 0 0.33333333]]

行列の足し算と引き算、スカラー倍を混ぜた計算

5

\times
\begin{pmatrix}
2 \\
1 \\
0 \\
3 \\
\end{pmatrix}
-
\begin{pmatrix}
4 \\
2 \\
3 \\
1 \\
\end{pmatrix}
+
\begin{pmatrix}
6 \\
0 \\
3 \\
12 \\
\end{pmatrix}
\div
6
\\

=
\begin{pmatrix}
10 \\
5 \\
0 \\
15 \\
\end{pmatrix}
-
\begin{pmatrix}
4 \\
2 \\
3 \\
1 \\
\end{pmatrix}
+
\begin{pmatrix}
1 \\
0 \\
1/2 \\
2 \\
\end{pmatrix}
\\

上記の行列式の最終的な答えは以下になる。

=

\begin{pmatrix}
7 \\
3 \\
-2.5 \\
16 \\
\end{pmatrix}