관리 메뉴

bright jazz music

선형대수 : 7. 행렬의 곱 본문

카테고리 없음

선형대수 : 7. 행렬의 곱

bright jazz music 2022. 7. 25. 08:38

행렬의 곱 (행렬곱)

벡터끼리의 내적을 행렬로 확장하면 행렬의 곱이 된다.

행렬의 곱은 인공지능에서 효율적인 계산을 시행하기 위해 사용한다.

우선 앞 행렬의 행과 뒤 행렬의 첫 열을 내적한다.

  • 행렬곱에서는 앞 행렬에서의 행의 각 요소(scarla)와 뒤 행렬에서의 열의 각 요소를 곱한 뒤 총합한다.
  • 앞 행렬의 첫 행과 뒤 행렬의 첫 열의 내적(dot product)가 끝나면 앞 행렬의 첫 행과 뒤 행렬의 두 번째 열을 내적한다.
  • 같은 처리를 앞 행렬의 마지막 행과 뒤 행렬의 마지막 열까지 반복한다.
  • 따라서 행렬의 곱을 수행하려면 반드시 앞 행렬의 열 수와 뒤 행렬의 행 수가 같아야 한다.

 

앞 행렬의 첫 행과 뒷 행렬의 첫 열의 내적이 끝나면, 앞 행렬의 첫 행과 뒤 행렬의 두 번째 열을 내적한다.

 

 

 

행렬곱의 일반화

LaTeX 수식
$ \begin{align} AB &=\begin{pmatrix} a_{11}&a_{12}&\cdots & a_{1m}\\ a_{21}&a_{22}&\cdots & a_{2m}\\ \vdots & \vdots & \ddots & \vdots \\ a_{l1}&a_{l2}&\cdots & a_{lm} \end{pmatrix} \begin{pmatrix} b_{11} & b_{12}&\cdots & b_{1n}\\ b_{21}&b_{22}&\cdots & b_{2n}\\ \vdots & \vdots & \ddots & \vdots \\ b_{m1}&b_{m2}&\cdots & b_{mn} \end{pmatrix}\\ \\ &= \begin{pmatrix} \sum_{k=1}^m a_{1k}b_{k1}&\sum_{k=1}^m a_{1k}b_{k2}&\cdots & \sum_{k=1}^m a_{1k}b_{kn}\\ \sum_{k=1}^m a_{2k}b_{k1}&\sum_{k=1}^m a_{2k}b_{k2}&\cdots & \sum_{k=1}^m a_{2k}b_{kn}\\ \vdots & \vdots & \ddots & \vdots \\ \sum_{k=1}^m a_{lk}b_{k1}&\sum_{k=1}^m a_{lk}b_{k2}&\cdots & \sum_{k=1}^m a_{lk}b_{kn} \end{pmatrix} \end{align}$

 

 

파이썬에서의 행렬곱 구현

NumPydml dot() 함수(내적 함수)를 사용해서 구할 수 있다.

 

import numpy as np

a = np.array([[0, 1, 2],
              [1, 2, 3]])

b = np.array([[2, 1],
              [2, 1],
              [2, 1]])

print(np.dot(a, b))

# [[ 6  3]
#  [12  6]]

 

 

 

 

Comments