ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

手を動かすべき【マンガでわかる線形代数】読書ログ2日目

スポンサードリンク

読んでる。

マンガでわかる線形代数

マンガでわかる線形代数

図にするの面倒なのでnumpyでやる。(numpyだったらわかるんだけどな…)

>>> import numpy as np
>>> a = np.array([[1, 2], [3,4]])
>>> a
array([[1, 2],
       [3, 4]])
>>> b = np.array([[4, 5], [7, 5]])
>>> b
array([[4, 5],
       [7, 5]])

行列の行数と列数が等しい行列はn次正方行列と呼ばれる

>>> a = np.ones([5, 5])
>>> a.shape
(5, 5)
>>> a
array([[ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.]])

行列の和は成分通しの足し算

>>> a + b
array([[ 5,  7],
       [10,  9]])

行列の差は成分通しの引き算

>>> a - b
array([[-3, -3],
       [-4, -1]])

スカラー倍は成分に掛け算すればいい

>>> a * 10
array([[10, 20],
       [30, 40]])

正直面倒。これは計算がパッと浮かぶようになるまで手を動かしたほうが良い(プログラムじゃなくて紙とペンで計算の流れを書くってこと)

>>> np.dot(a, b)
array([[18, 15],
       [40, 35]])

通常の掛け算とは違い、左右の値を入れ替えると答えは一致しない

>>> np.dot(b, a)
array([[19, 28],
       [22, 34]])

また、積はmxn行列はnxp行列のように左側の行列の列数と右側の行列の行数が等しくなければ計算できない

>>> a.shape
(2, 2)   # 行数2 列数2
>>> c = np.array([1, 2, 3])
>>> c.shape
(3,)  # 行数3 列数1
>>> np.dot(a, c)  # 計算できないのでエラー
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: shapes (2,2) and (3,) not aligned: 2 (dim 1) != 3 (dim 0)