Journey to CS/KNOU CS

[이산수학] 행렬곱은 어떻게 구할까? (feat. 펭귄 90도 회전시키기)

Cordilog 2025. 3. 11. 13:25
행렬의 합과 차는 직관적으로 이해가 되는 반면 행렬곱은 그 원리와 계산 방식이 다소 복잡하게 느껴질 수 있다. 하지만 행렬곱은 명확한 규칙을 기반으로 하기 때문에 규칙만 알면 간단하게 구할 수 있다. 👌

 

행렬곱이란?

우선 행렬은 숫자(꼭 숫자가 아닐 수도 있음)들이 행(가로)과 열(세로)로 배열된 구조다. 간단한 예를 들어, 두 학생의 국어와 수학 점수를 행렬로 나타내면 다음과 같다.

 

첫 번째 행은 학생 A의 점수 (국어 80, 수학 90)을, 

두 번째 행은 학생 B의 점수 (국어 70, 수학 60)을 의미한다.

행렬곱은 두 행렬을 결합하여 새로운 행렬을 생성하는 연산이다. 첫 번째 행렬의 행과 두 번째 행렬의 열을 특정 규칙에 따라 곱하고 더해 새로운 값을 만드는 것이다. 

 

행렬곱의 기본 원리와 조건

행렬곱을 수행하려면 두 행렬의 크기가 호환되어야 한다. 구체적으로, 첫 번째 행렬(행렬 A)의 열 개수가 두 번째 행렬(행렬 B)의 행 개수와 같아야 한다.

  • A가 m×n (m행 n열)이라면,
  • B는 n×p (n행 p열)이어야 한다.
  • 크기 규칙: AxB 행렬곱의 결과로 생성된 행렬의 크기는 m×p가 된다.

이는 행렬곱이 첫 번째 행렬의 각 행과 두 번째 행렬의 각 열을 짝지어 계산하는 방식이기 때문이다. 즉, A의 열 개수와 B의 행 개수만 일치하면 A의 행 개수와 B의 열 개수가 달라도 곱셈이 가능하다.

이 과정을 수학적으로 “내적(dot product, inner product)”이라고 부르기도 한다.

 

행렬곱 계산 방법

구체적인 예시를 가지고 행렬곱의 계산 과정을 살펴보자. 다음 두 행렬을 곱한다고 하면,

  • A는 2×3 행렬(2행 3열), B는 3×2 행렬(3행 2열)이다.
  • A의 열 개수(3)와 B의 행 개수(3)가 일치하므로 곱셈이 가능하다.
  • 계산 결과 행렬의 크기는 A의 행 개수(2) × B의 열 개수(2) = 2×2가 된다.

계산 과정

A의 행과 B의 열을 순차적으로 결합해서 결과 행렬의 각 원소를 얻어낸다.

A x B = C 라고 할 때,

 

C11 :

  • A의 1행 [1 2 3]과 B의 1열 [4 6 8]을 결합
  • 계산: (1x4) + (2x6) + (3x8) = 4 + 12 + 24 = 40

C12:

  • A의 1행 [1 2 3]과 B의 2열 [5 7 9]을 결합
  • 계산: (1x5) + (2x7) + (3x9) = 5 + 14 + 27 = 46

C21:

  • A의 2행 [6 7 8]과 B의 1열 [4 6 8]을 결합
  • 계산: (6x4) + (7x6) + (8x8) = 24 + 42 + 64 = 130

C22:

  • A의 2행 [6 7 8]과 B의 2열 [5 7 9]을 결합
  • 계산: (6x5) + (7x7) + (8x9) = 30 + 49 + 72 = 151

따라서 A와 B의 행렬곱 C는 다음과 같다.

 

행렬곱의 비가환성 (Non-commutative)

행렬곱은 순서가 중요하다. A×B 와 는 결과가 다를 수 있고, 경우에 따라 곱셈 자체가 불가능할 수 있다. 예를 들어, A가 (4x2), B가 (2x3) 크기의 행렬이라면 A의 열의 수가 2, B의 행의 수가 2로 일치하여 AxB 곱은 가능하지만, 반대 BxA의 곱은 B의 열의 수가 3, A의 행의 수가 4로 일치하지 않아 계산을 할 수 없다. 

 

행렬곱의 응용 예시

그래픽 좌표 변환

행렬곱은 컴퓨터 그래픽에서 객체의 위치나 모양을 변환하는 데 사용된다.

다음의 2D 펭귄 캐릭터를 반시계방향으로 90도 회전시키는 상황을 예로 들어보자.

펭귄의 좌표가 [x,y]로 주어졌다고 할 때, 이를 행렬로 표현하면:

 

  • 좌표 행렬 = [x y]
  • 반시계 방향으로 90도 회전시키는 회전 행렬은 다음과 같다.

행렬곱을 수행하면:

  • 새로운 좌표 = [x y] × [0 −1] = [ (x×0)+(y×1), (x×−1)+(y×0) ] = [y −x]
수학적 표현

 

결과

 

결과적으로 [x,y]가 [로 변환되어 펭귄이 반시계 방향 90도 회전한다.

이 방식은 3D 그래픽에서도 확장되어 객체의 이동, 회전, 크기 조정을 처리하며, 영화 CGI나 게임 엔진에서 필수적인 연산이다.