行列計算の基本的な方法[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さくらえび

  • さくらえび
  • さくらえびと申します
    企業勤め系研究者です。理論物理が専門分野。
    エンジニア・営業・コンサルを経験し、今はデータサイエンティストとしてお仕事をさせていただいております。