행렬(matrix)는 벡터를 원소로 가지는 2차원 배열이다.
벡터가 공간에서 한 점을 의미한다면 행렬은 여러점들을 나타낸다.
행렬끼리 같은 모양을 가지면 덧셈, 뺄셈 계산이 가능하다.
성분곱, 스칼라곱도 벡터와 차이가 없다.
행렬의 곱셈은 행렬X의 i번째 행벡터와 행렬 Y의 j 번째 열벡터 사이의 내적을 성분으로 갖는다. (이때 X의 열의 개수와 Y의 행의 개수가 같아야 한다)
numpy에선 np.matmul 혹은 @ 기호를 사용한다
ps) np.inner는 i번째 행벡터와 j 번째 행벡터 사이의 내적을 계산한다.(행렬곱과 다름)
행렬 A의 연산을 거꾸로 되돌리는 행렬을 역행렬 이라고 부르고 이라 표기한다.
(역행렬은 행과 열의 숫자가 같고 행렬식이 0이 아닌 경우에만 계산할 수 있다)
np.linalg.inv(X)를 사용해 역행렬을 구할수 있다.
만일 역행렬을 계산할 수 없다면 유사역행렬(pseudo-inverse) 또는 무어펜로즈(Moore Penrose)역행렬 을 이용한다.
np.linalg.pinv(X)
n >= m 인 경우(행이 더 김)
n <= m 인 경우(열이 더 김)
import numpy as np
x = np.array([[1,0,2],
[0,1,0]])
np.linalg.pinv(x)
array([[0.2, 0. ], [0. , 1. ], [0.4, 0. ]])
x @ np.linalg.pinv(x)
array([[1., 0.], [0., 1.]])