1. Home
  2. プログラマーのための線形代数
  3. 行列の演算
  4. 行列の掛け算(アダマール積)

行列の掛け算(アダマール積)

行列の掛け算(アダマール積)は、もう一つのドット積よりは使用頻度は低いですが、線形代数において基本的な行列の演算の一つです。当ページでは、これについて以下のことがわかります。

このページでわかること

  • 行列の掛け算(アダマール積)とは何か
  • 行列の掛け算(アダマール積)のやり方
  • Python で行列の掛け算(アダマール積)

行列の掛け算(アダマール積)とは何か

行列とは」で述べた通り、行列はベクトルを変換するための写像(関数)です。そして行列のアダマール積は、何らかの目的で 2 つの関数で掛け算を行なって、新しい 3 つ目の関数を作るということを意味します。

以上が行列のアダマール積です。

行列の掛け算(アダマール積)のやり方

行列のアダマール積は簡単です。以下の 2 つの行列があるとします。

\[\begin{eqnarray}
A=
\begin{pmatrix}
a_{1,1} & a_{1,2}\\
a_{2,1} & a_{2,2}
\end{pmatrix}, \ \ \
B=
\begin{pmatrix}
b_{1,1} & b_{1,2}\\
b_{2,1} & b_{2,2}
\end{pmatrix}
\end{eqnarray}\]

これらの行列同士でアダマール積を行うと、それぞれ同じ要素の値で掛け算が行われます。

\[\begin{eqnarray}
A \circ B=
\begin{pmatrix}
a_{1,1} \times b_{1,1}
&
a_{1,2} \times b_{1,2}\\
a_{2,1} \times b_{2,1}
&
a_{2,2} \times b_{2,2}\\
\end{pmatrix}
\end{eqnarray}\]

例として次の 2 つの行列のアダマール積を求めてみましょう。

\[\begin{eqnarray}
A=
\begin{pmatrix}
5 & 6\\
7 & 8
\end{pmatrix}, \ \ \
B=
\begin{pmatrix}
1 & 2\\
3 & 4
\end{pmatrix}
\end{eqnarray}\]

これらの行列同士でアダマール積を行うと、それぞれ同じ要素の値が掛け合わされます。

\[\begin{eqnarray}
A \circ B=
\begin{pmatrix}
5 & 12\\
21 & 32\\
\end{pmatrix}
\end{eqnarray}\]

なお行列のアダマール積は、2 つの行列の行数と列数が同じである場合のみ可能です。

Pythonで行列の掛け算(アダマール積)

Python では NumPy で作成した行列同士を * 演算子で繋ぐことでアダマール積を求めることができます。

In [1]:
# NumPy のインポート
import numpy as np

# 1 つ目の行列の定義
A = np.array([[1,2,3],[4,5,6]])
print(A)
[[1 2 3]
 [4 5 6]]
In [2]:
# 2 つ目の行列の定義
B = np.array([[1,2,3],[4,5,6]])
print(B)
[[1 2 3]
 [4 5 6]]
In [3]:
# 行列の掛け算(アダマール積)
C = A * B
print(C)
[[ 1  4  9]
 [16 25 36]]