NumPyの使い方(11) 行列計算
NumPyの行列計算について
内積
内積はnp.dot()関数を使うかarray.dot()メソッドを使うか。
内積は順序によって結果が異なる。
import numpy as np a1 = np.ones([2, 2], dtype=int) a2 = np.arange(1, 5).reshape(2, 2) print(a1) # [[1 1] # [1 1]] print(a2) # [[1 2] # [3 4]] # 行列の内積(1) print(np.dot(a1, a2)) # [[4 6] # [4 6]] # 行列の内積(1) print(a1.dot(a2)) # [[4 6] # [4 6]] # 行列の内積(3) print(np.dot(a2, a1)) # [[3 3] # [7 7]]
線形代数関数
numpy.linalgライブラリに線形代数の関数がある。
array.T | 転置行列 |
diag | 正方行列の対角成分を抜き出す。また、1次元配列からはそれを対角成分とする正方行列を作る。 |
dot | 内積 |
cross | 外積 |
trace | 対角成分の和 |
linalg.norm | ノルム。ベクトルの長さ |
linalg.det | 行列式 |
linalg.eig | 固有値と固有行列 |
linalg.inv | 逆行列 |
pinv | 疑似逆行列 |
qr | QR分解 |
svd | 特異値分解 |
linalg.solve | 連立方程式を解く |
lstsq | 最小二乗法 |
a1 = np.array([[1, 2],[3, 4]]) print(a1) # [[1 2] # [3 4]] # 転置行列 print(a1.T) # [[1 3] # [2 4]] # 対角成分 print(np.diag(a1)) # [1 4] print(np.diag([1, 2, 3, 4, 5])) # [[1 0 0 0 0] # [0 2 0 0 0] # [0 0 3 0 0] # [0 0 0 4 0] # [0 0 0 0 5]] # trace print(np.trace(a1)) # 5 # 行列式 print(np.linalg.det(a1)) # -2.0 # 固有ベクトルと固有値 print(np.linalg.eig(a1)) # (array([-0.37228132, 5.37228132]), array([[-0.82456484, -0.41597356], # [ 0.56576746, -0.90937671]])) # 逆行列 print(np.linalg.inv(a1)) # [[-2. 1. ] # [ 1.5 -0.5]] # 連立方程式 x+2y=5, 3x+4y=13を解く print(np.linalg.solve(a1, [5, 13])) # [3. 1. ] x=3, y=1