高校物理、大学受験、大学物理、プログラミングの記事を書きます。

Python行列の積 Numpy(np.dot)

2019/01/20
 
この記事を書いている人 - WRITER -

 

目標

 

Pythonを用いて行列の積の計算を行えるようにします。

スポンサーリンク

行列の積

 

3行3列の行列\(A\)と\(B\)を考えます。

\begin{align*}A=\begin{pmatrix}
1 &2 &3 \\
4 &5 &6 \\
7 & 8 &9
\end{pmatrix}\cdot\cdot\cdot (1)\end{align*}

\begin{align*}B=\begin{pmatrix}
11 &12 &13 \\
14 &15 &16 \\
17 &18 &19
\end{pmatrix}\cdot\cdot\cdot (2)\end{align*}

 

行列の積とは、

\begin{align*}AB=\begin{pmatrix}
1 &2 &3 \\
4 &5 &6 \\
7 & 8 &9
\end{pmatrix}\begin{pmatrix}
11 &12 &13 \\
14 &15 &16 \\
17 &18 &19
\end{pmatrix}\cdot\cdot\cdot (3)\end{align*}

を計算することになります。

計算方法は、「行列\(A\)の\(i\)行目」「行列\(B\)の\(j\)列目」の各成分同士の積を足し合わせたものを\(i\)行\(j\)列目に書いていく。

 

 

具体的には、下記のようなことを繰り返していきます。

計算するのは結構面倒です。


※行列の積はどのような行列同士でも計算できるわけではありません。

例えば「\(i\)行\(j\)列の行列\(A\)」と「\(m\)行\(n\)列の行列\(B\)」があったとします。

行列の積が計算できるのは、\(i=n\)(一つ目の行列Aの”行”と行列Bの”列”の数が同じ)の場合だけです。

だからこのような場合は計算ができません。

\begin{align*}A=\begin{pmatrix}
1 &2 &3 &4&5\\
6 &7 &8 &9&10 \\
11 &12 &13 &14&15
\end{pmatrix}\end{align*}

\begin{align*}B=\begin{pmatrix}
21 &22 &23 \\
24 &25 &26 \\ 
27 &28 &29 \\
\end{pmatrix}\end{align*}

 

この2つの行列の積

\begin{align*}AB=\begin{pmatrix}
1 &2 &3 &4&5\\
6 &7 &8 &9&10 \\
11 &12 &13 &14&15
\end{pmatrix}\begin{pmatrix}
21 &22 &23 \\
24 &25 &26 \\ 
27 &28 &29 \\
\end{pmatrix}\end{align*}

 

Pythonでもこの場合は計算エラーが出ます。

 

Pythonで行列の計算

 

では、(3)式

\begin{align*}AB=\begin{pmatrix}
1 &2 &3 \\
4 &5 &6 \\
7 & 8 &9
\end{pmatrix}\begin{pmatrix}
11 &12 &13 \\
14 &15 &16 \\
17 &18 &19
\end{pmatrix}\cdot\cdot\cdot (3)\end{align*}

の計算をPythonにしてもらいましょう。

 

Pythonを用いて行列の計算を行うには、「numpyのdot関数」を使います。

実行結果

面倒な結果も楽々計算してくれます。

 

「3行5列の行列」と「5行3列の行列」の積

 

これも計算はできます。

例えば下記のような2つの行列があったとします。

\begin{align*}A=\begin{pmatrix}
1 &2 &3 &4&5\\
6 &7 &8 &9&10 \\
11 &12 &13 &14&15
\end{pmatrix}\cdot\cdot\cdot (4)\end{align*}

\begin{align*}B=\begin{pmatrix}
21 &22 &23 \\
24 &25 &26 \\ 
27 &28 &29 \\
30 &31 &32 \\
33 &33 &35 \\
\end{pmatrix}\cdot\cdot\cdot (5)\end{align*}

 

この2つの行列の積とは、

\begin{align*}AB=\begin{pmatrix}
1 &2 &3 &4&5\\
6 &7 &8 &9&10 \\
11 &12 &13 &14&15
\end{pmatrix}\begin{pmatrix}
21 &22 &23 \\
24 &25 &26 \\ 
27 &28 &29 \\
30 &31 &32 \\
33 &33 &35 \\
\end{pmatrix}\cdot\cdot\cdot (6)\end{align*}

を計算することになります(手計算はめちゃくちゃめんどうです)

 

これをPythonで実行します。

実行結果

3行3列の行列が結果として出てきました。

 

「3行5列の行列」と「3行3列の行列」の積

 

\begin{align*}AB=\begin{pmatrix}
1 &2 &3 &4&5\\
6 &7 &8 &9&10 \\
11 &12 &13 &14&15
\end{pmatrix}\begin{pmatrix}
21 &22 &23 \\
24 &25 &26 \\ 
27 &28 &29 \\
\end{pmatrix}\end{align*}

を計算してみることにします。

これはエラーが出ます。

結果は下記のようなエラーが出されてしまいました。

 

「5行5列の行列」と「3行3列の行列」の積

 

\begin{align*}AB=\begin{pmatrix}
1 &2 &3 &4&5\\
6 &7 &8 &9&10 \\
11 &12 &13 &14&15\\
16 &17 &18 &19&20\\
21 &22 &23 &24&25
\end{pmatrix}\begin{pmatrix}
21 &22 &23 \\
24 &25 &26 \\ 
27 &28 &29 \\
\end{pmatrix}\end{align*}

を計算してみることにします。

これはエラーが出ます。

結果はエラーが出ます。

 

「5行5列の行列」と「5行2列の行列」の積

 

 

\begin{align*}AB=\begin{pmatrix}
1 &2 &3 &4&5\\
6 &7 &8 &9&10 \\
11 &12 &13 &14&15\\
16 &17 &18 &19&20\\
21 &22 &23 &24&25
\end{pmatrix}\begin{pmatrix}
21 &22 \\
23 &24 \\ 
25 &26 \\
27 &28 \\ 
29 &30 \\
\end{pmatrix}\end{align*}

 

これなら1つ目の行列の”行”2つ目の行列の”列”数が合っているので計算ができます。

 

実行してみると、

 

どうやらnp.matrixとしなくても計算してくれる?

 

行列の積の計算には、計算する行列を

と書かずに、

としてても行列の積は計算してくれるようです。

 

試しにしてみます。

実行結果

 

結果は「np.matrix」で行列を作った場合と同じでしたね。

 

実はmatrixで行列を作成した場合は、A*Bで行列の積を計算できる

 

後で知ったのですが、行列の積はA*Bと書いても良いみたいです。

実行結果

 

この記事を書いている人 - WRITER -

コメントを残す

Copyright© 宇宙に入ったカマキリ , 2018 All Rights Reserved.