見出し画像

Pythonを用いた機械学習15日目

多次元のデータを扱う行列の足し算引き算(①)と、特徴的な掛け算(②)について学んでいく。

前回の内容はこちら。


0.行列の基礎

行と列・・・行列は、その要素の横方向を「行」、縦方向を「列」という。例えば、以下の行列Aは、2行3列の行列という。

画像1

正方行列・・・行の数と列の数が同じ行列のこと。以下の行列Bは、2次の正方行列、行列Cは3次の正方行列という。

画像2

画像3


1.行列の足し算と引き算

2つの行列の和や差は、同じ位置を足したり引いたりする。

例題)次の行列X,YのX+YとX-Yを求める。

画像4

解答)

画像5


*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を求める。

画像6

行列同士の積・・・左側の行列の「行」と右側の行列の「列」を掛け合わせて計算する。例えば、行列A,Bの積A×Bは、ABと書く。

例題)以下の行列A,Bの積を求める。

画像7

解答)

画像8

※掛け合わせる行列の左側の列、右側の行の数が同じである必要がある。

また、左の行列が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といった記号であらわす。

画像9

この単位行列は、どちらから掛けても答えが変わらないという特徴がある。



【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)\\
\]


次は転置行列と逆行列について学んでいく。


よろしければサポートお願いします。いただいたサポートを皆さんに還元していきたいと思っております。