행렬

minjun·2022년 1월 23일
0

AImath

목록 보기
2/4

행렬

행렬(matrix)는 벡터를 원소로 가지는 2차원 배열이다.

벡터가 공간에서 한 점을 의미한다면 행렬은 여러점들을 나타낸다.
행렬끼리 같은 모양을 가지면 덧셈, 뺄셈 계산이 가능하다.
성분곱, 스칼라곱도 벡터와 차이가 없다.

행렬의 곱셈

행렬의 곱셈은 행렬X의 i번째 행벡터와 행렬 Y의 j 번째 열벡터 사이의 내적을 성분으로 갖는다. (이때 X의 열의 개수와 Y의 행의 개수가 같아야 한다)
numpy에선 np.matmul 혹은 @ 기호를 사용한다

  • 행렬은 벡터공간에서 사용되는 연산자로 이해
  • 행렬곱을 통해 벡터를 다른 차원의 공간으로 보낼 수 있다.
  • 행렬곱을 통해 패턴을 추출할 수 있고 데이터를 압축할 수도 있다.

ps) np.inner는 i번째 행벡터와 j 번째 행벡터 사이의 내적을 계산한다.(행렬곱과 다름)

역행렬

행렬 A의 연산을 거꾸로 되돌리는 행렬을 역행렬 이라고 부르고 A1A^{-1} 이라 표기한다.
(역행렬은 행과 열의 숫자가 같고 행렬식이 0이 아닌 경우에만 계산할 수 있다)
np.linalg.inv(X)를 사용해 역행렬을 구할수 있다.

AA1=A1A=IAA^{-1} = A^{-1}A = I

만일 역행렬을 계산할 수 없다면 유사역행렬(pseudo-inverse) 또는 무어펜로즈(Moore Penrose)역행렬 A+A^{+} 을 이용한다.
np.linalg.pinv(X)

n >= m 인 경우(행이 더 김)

  • A+=(ATA)1ATA^{+} = (A^{T}A)^{-1}A^T
  • A+A=IA^+A = I 성립

n <= m 인 경우(열이 더 김)

  • A+=AT(AAT)1A^{+} = A^T(AA^T)^{-1}
  • AA+=IAA^+ = I 성립
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.]])
profile
자라나라 머리머리

0개의 댓글