行列計算の基本的な方法[python]
pythonで行列計算ができるとのことで、いろいろと試してみました。
今回紹介するのは、行列演算の基本的な部分、行列の足し算・引き算・掛け算・行列式・逆行列です。
Pythonで行列の計算を行うには、ライブラリnumpyを使用します。
numpyのライブラリは便利なものが多く、今まで配列要素を気にしながら計算してきたものが、
何も考えずにコマンドを打てば終わってしまいます。
では、紹介していきましょう。
行列の足し算と引き算
行列の足し算のソースコードを記載します。
行列を以下のように仮定した場合、次の式となります。
\[
A=\left( \begin{array}{cccc}
a_{11} & a_{12} & a_{13}\\
a_{21} & a_{22} & a_{23} \\
a_{31} & a_{32} & a_{33}
\end{array} \right)
\]
\[
B=\left( \begin{array}{cccc}
b_{11} & b_{12} & b_{13}\\
b_{21} & b_{22} & b_{23} \\
b_{31} & b_{32} & b_{33}
\end{array} \right)
\]
行列の和
\[
C = A + B
\]
\[
C=\left( \begin{array}{cccc}
a_{11} + b_{11} & a_{12} + b_{12} & a_{13} + b_{13} \\
a_{21} + b_{21} & a_{22} + b_{22} & a_{23} + b_{23} \\
a_{31} + b_{31} & a_{32} + b_{32} & a_{33} + b_{33}
\end{array} \right)
\]
行列の差
\[
D = A – B
\]
\[
D=\left( \begin{array}{cccc}
a_{11} – b_{11} & a_{12} – b_{12} & a_{13} – b_{13} \\
a_{21} – b_{21} & a_{22} – b_{22} & a_{23} – b_{23} \\
a_{31} – b_{31} & a_{32} – b_{32} & a_{33} – b_{33}
\end{array} \right)
\]
import math as mt import numpy as np #行列Aとします。 p1 = np.array([[1,2,3], [4,5,6], [7,8,9]]) #行列Bとします。 p2 = np.array([[9,8,7], [6,5,4], [3,2,1]]) #行列C(AとBの和) P3 = np.add(p1,p2) #行列D(AとBの差) P4 = np.subtract(p1,p2) #ターミナル出力を行います。 print("行列の和の結果") print(P3) print("行列の差の結果") print(P4)
行列の和と差の結果確認

行列の掛け算と行列式
行列の掛け算と行列式のソースコードを記載します。
行列の積
\[
C = A \cdot B
\]
行列式(Aが2行2列の場合)
\[
A=\left( \begin{array}{cccc}
a & b\\
c & d
\end{array} \right)
\]
行列式det(A)は
\[
det(A) = ad – bc
\]
行列式(Aが3行3列の場合)
\[
A=\left( \begin{array}{cccc}
a & b & c\\
d & e & f \\
g & h & i
\end{array} \right)
\]
行列式det(A)は
\[
det(A) = aei + bfg + cdh – ceg – bdi – afh
\]
import math as mt import numpy as np #行列Aとします。 p1 = np.array([[1,0,3], [0,1,0], [3,0,1]]) #行列Bとします。 p2 = np.array([[1,0,0], [0,1,0], [0,0,1]]) #行列C(AとBの積) P3 = np.dot(p1,p2) #行列式(numpyのlinalgを使用します。) detrminant = np.linalg.det(p1) #ターミナル出力を行います。 print("行列AとBの積の結果") print(P3) print("行列Aの行列式") print(detrminant)
行列の積と、行列式の結果確認

逆行列
行列の逆行列をとるソースコードを記載します。
import math as mt import numpy as np #行列Aとします。 p1 = np.array([[1,0,3], [0,1,0], [3,0,1]]) #行列Bとします。 p2 = np.array([[1,0,0], [0,1,0], [0,0,1]]) #逆行列 inv_A = np.linalg.inv(p1) inv_B = np.linalg.inv(p2) #ターミナル出力を行います。 print("行列Aの逆行列") print(inv_A) print("行列Bの逆行列") print(inv_B)
逆行列の結果確認

ライブラリを呼び出すだけで計算できるって、素敵ですね。
検算するのも苦にならないので、自分のソースコードのデバッグ目的でも使っています。
byさくらえび