Pythonを用いた機械学習15日目
多次元のデータを扱う行列の足し算引き算(①)と、特徴的な掛け算(②)について学んでいく。
前回の内容はこちら。
0.行列の基礎
*行と列・・・行列は、その要素の横方向を「行」、縦方向を「列」という。例えば、以下の行列Aは、2行3列の行列という。
*正方行列・・・行の数と列の数が同じ行列のこと。以下の行列Bは、2次の正方行列、行列Cは3次の正方行列という。
1.行列の足し算と引き算
2つの行列の和や差は、同じ位置を足したり引いたりする。
例題)次の行列X,YのX+YとX-Yを求める。
解答)
*NumPyで行列演算を行うコード
>>> import numpy as np
>>>
>>> a = np.array([[1,2,3],[3,4,5]])
>>> b = np.array([[3,4,5],[4,5,6]])
>>>
>>> print(a + b)
[[ 4 6 8]
[ 7 9 11]]
>>> print(a - b)
[[-2 -2 -2]
[-1 -1 -1]]
>>>
2.行列の掛け算
*定数倍(スカラー倍)・・・行列に2倍、3倍などすること。
例題)以下の行列Xを2倍した行列2Xを求める。
*行列同士の積・・・左側の行列の「行」と右側の行列の「列」を掛け合わせて計算する。例えば、行列A,Bの積A×Bは、ABと書く。
例題)以下の行列A,Bの積を求める。
解答)
※掛け合わせる行列の左側の列、右側の行の数が同じである必要がある。
また、左の行列がm行k列、右の行列がk行n列の場合、その積はm行n列の行列となる。
A〜Fの6つの行列があり、行列の積ABCDEFを計算するとき、行列Aが3行4列、行列Fが5行2列だったら、結果は3行2列になると瞬時に判断できるようにしておく。
NumPyでは、行列の積は「dot」で実装できる。また、行列を扱う「matrix」もあり、この場合は演算子「*」を使うので掛け算をわかりやすく表現できる。
また、Python3.5以降では「@ 演算子」が追加された。そのため、NumPyの行列を使う理由がなくなりつつある。
*行列の掛け算を実装するコード
>>> import numpy as np
>>>
>>> A = np.array([[1,2,3],[3,4,5]])
>>> B = np.array([[3,4],[4,5],[5,6]])
>>>
>>> print(A.dot(B))
[[26 32]
[50 62]]
>>> C = np.matrix([[1,2,3],[3,4,5]])
>>> D = np.matrix([[3,4],[4,5],[5,6]])
>>> print(C * D)
[[26 32]
[50 62]]
>>> print(A @ B)
[[26 32]
[50 62]]
>>>
5行目:dotを使った行列の積
8〜10行目:mtrixを使った行列の積
13行目:@ 演算子を使った行列の積
行列の掛け算では、左右を入れ替えたときに結果が一致しない。つまり「交換法則が成り立たない」ことに注意。行列ABとBAは別の結果になる。
*単位行列・・・左上から右下への斜めの要素が全て「1」、それ以外が「0」になっている行列でEやIといった記号であらわす。
この単位行列は、どちらから掛けても答えが変わらないという特徴がある。
【TeXclipメモ】
・\Rightarrow・・・二重の右矢印
・行列を左右に並べる
\[
X = \left(
\begin{array}{ccc}
1 & 2 & 3 \\
3 & 4 & 5
\end{array}
\right),
Y = \left(
\begin{array}{ccc}
3 & 4 & 5 \\
4 & 5 & 6
\end{array}
\right)
\]
・単位行列
E = \left(
\begin{array}{cc}
1 & 0 \\
0 & 1
\end{array}
\right),
E = \left(
\begin{array}{ccc}
1 & 0 & 0 \\
0 & 1 & 0\\
0 & 0 & 1
\end{array}
\right)\\
\]
次は転置行列と逆行列について学んでいく。
よろしければサポートお願いします。いただいたサポートを皆さんに還元していきたいと思っております。