행렬 (matrix)

pseeej·2021년 8월 3일
0

AI_Mathematics

목록 보기
2/9
post-thumbnail

행렬?

  • 행렬(matrix)는 벡터를 원소로 가지는 2차원 배열
  • 행(row)과 열(column)으로 이뤄져있음
  • 행렬의 특정 행(또는 열)을 고정하면 행(또는 열)벡터
  • 행렬의 행벡터 x_i는 i번째 데이터
  • 행렬의 x_ij는 i번째 데이터의 j번째 변수의 값

행렬의 계산

  • 행렬끼리 같은 모양을 가지면 덧셈, 뺄셈 계산 가능
  • 성분곱은 벡터와 같음. A_ij * B_ij으로 하나씩 곱하는 방식
  • 스칼라곱도 벡터와 같음. 3A = A의 행렬 모든 원소에 스칼라값인 3을 곱해주면 됨
  • 행렬 곱셈은 i번째 행벡터와 j번째 열벡터 사이의 내적을 성분으로 가지는 행렬 계산
    - 행렬 곱셈 위해서는 두 개의 행렬 사이 차원이 같아야함. ex) A(NxK) * B(KxM)
    • 행렬 곱셈 이용하여 벡터를 다른 차원의 공간으로 보낼 수 있음
    • 행렬 곱셈 이용하여 패턴 추출, 데이터 압축 가능

행렬의 내적

  • numpy.inner 사용하여 i번째 행벡터와 j번째 행벡터 사이의 내적을 성분으로 가지는 행렬 계산 가능
> X = np.array([[1, -2, 3], [7, 5, 0], [-2, -1, 2]])
> Y = np.array([[0, 1, -1], [1, -1, 0]])
> np.inner(X, Y)
array([[-5, 3], [5, 2], [-3, -1]])

역행렬 (inverse matrix)

  • 어떤 행렬 A의 연산을 거꾸로 되돌리는 행렬을 역행렬(inverse matrix).
  • A의 역행렬은 A^−1로 표현
  • 역행렬은 행과 열 숫자가 같고(NxN 행렬), 행렬식(determinant)이 0이 아닌 경우에만 계산할 수 있다.
  • numpy.linalg.inv 이용
> X = np.array([[1, -2, 3], [7, 5, 0], [-2, -1, 2]])
> np.linalg.inv(X)
array([[0.21276596, 0.0212766, -0.31914894], [-0.29787234, 0.17021277, 0.44680581], [0.06382979, 0.10638298, 0.40425532]])
  • 역행렬을 구할 수 없을 땐 유사역행렬(pseudo-inverse) 또는 무어-펜로즈(Moore-Penrose) 역행렬 A^+ 이용
  • numpy.linalg.pinv 이용
> A = np.array([[0, 1], [1, -1], [-2, 1]])
> np.linalg.pinv(A)
array([[5.00000000e-01, 4.09730229e-17, -5.00000000e-01], [8.33333333e-01, -3.33333333e-01, -1.66666667e-01]])
  • numpy.linalg.pinv 이용하여 연립방정식의 해, 선형회귀식 등을 구할 수 있음
profile
세진니의 눈물 가득 블로그

0개의 댓글