Zen's Hermitage

[선형 대수 2] 행렬 심화

(Updated: 2026년 3월 22일)
linear-algebramath

복잡한 행렬을 왜 굳이 나누어 볼까

큰 문제를 만났을 때 사람이 가장 먼저 하는 일 중 하나는, 그것을 한 번에 붙잡으려 하지 않고 작은 부분으로 나누어 보는 것이다. 커다란 퍼즐도 한 조각씩 맞추고, 긴 글도 문단으로 나누어 읽고, 어려운 프로그램도 여러 함수로 쪼개서 만든다. 이렇게 해야 전체가 덜 막막해지고, 어디가 어떻게 움직이는지 눈에 들어오기 시작한다.

행렬도 똑같다. 처음 행렬을 배우면, 행과 열에 숫자가 빼곡하게 들어 있는 큰 직사각형 표처럼 보인다. 작은 행렬일 때는 괜찮지만, 크기가 커지기 시작하면 한 번에 보는 것이 금방 부담스러워진다. 숫자가 많아질수록 계산도 길어지고, 구조도 잘 보이지 않는다. 이때 아주 유용한 생각이 있다. 큰 행렬을 하나의 덩어리로만 보지 말고, 몇 개의 작은 구역으로 잘라서 보자는 것이다.

이렇게 행렬을 여러 구역으로 나누어 보고, 각 구역을 하나의 작은 행렬처럼 다루는 방식이 블록행렬이다. 말은 조금 낯설 수 있지만, 아이디어 자체는 어렵지 않다. 큰 상자를 작은 칸으로 나누어 정리하는 것과 비슷하다. 옷장도 칸이 나뉘어 있으면 훨씬 정리하기 쉽고, 서랍도 구역이 나뉘면 어디에 무엇이 있는지 보기가 쉬워진다. 블록행렬도 그런 식으로 행렬의 내부를 구획별로 바라보는 방법이다.

블록행렬이란 무엇인가

우선 보통의 행렬 하나를 생각해보자. 예를 들어 어떤 큰 행렬 AA가 있다고 하자. 이 행렬의 가로와 세로에 선을 그어서 몇 개의 직사각형 구역으로 나눈다. 그리고 그 각 구역을 각각 하나의 작은 행렬이라고 생각한다. 그러면 원래는 숫자들의 배열이었던 큰 행렬이, 이제는 작은 행렬들의 배열처럼 보이게 된다.

가장 단순한 형태는 다음과 같다.

A=[A11A12A21A22]A = \begin{bmatrix} A_{11} & A_{12} \\ A_{21} & A_{22} \end{bmatrix}

이 식을 처음 보면 보통의 2×22 \times 2 행렬처럼 보일 수 있다. 하지만 여기서 중요한 점은 A11,A12,A21,A22A_{11}, A_{12}, A_{21}, A_{22}가 각각 숫자 하나가 아니라는 것이다. 각각이 작은 행렬이다. 즉, 이 식은 “큰 행렬 AA를 네 개의 작은 구역으로 나누어 보았다”는 뜻이다.

예를 들어 실제로는 다음처럼 생긴 큰 행렬일 수 있다.

A=[12563478910131411121516]A = \begin{bmatrix} 1 & 2 & 5 & 6 \\ 3 & 4 & 7 & 8 \\ 9 & 10 & 13 & 14 \\ 11 & 12 & 15 & 16 \end{bmatrix}

이 행렬을 가운데에서 가로 한 번, 세로 한 번 잘라서 네 부분으로 나누면 다음처럼 볼 수 있다.

A=[[1234][5678][9101112][13141516]]A = \begin{bmatrix} \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} & \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} \\ \begin{bmatrix} 9 & 10 \\ 11 & 12 \end{bmatrix} & \begin{bmatrix} 13 & 14 \\ 15 & 16 \end{bmatrix} \end{bmatrix}

이제는 큰 행렬 하나가 네 개의 작은 행렬로 이루어진 것처럼 보인다. 이것이 바로 블록행렬이다.

여기서 중요한 감각은 이것이다. 원래는 숫자 1616개가 들어 있는 하나의 큰 표였는데, 이제는 작은 행렬 44개가 들어 있는 큰 표로 다시 해석되었다. 즉, “무엇을 하나의 단위로 볼 것인가”를 바꾸는 것이다. 숫자를 하나의 단위로 볼 수도 있고, 작은 행렬을 하나의 단위로 볼 수도 있다.

이 관점이 왜 좋을까. 이유는 간단하다. 큰 행렬 전체를 직접 계산하는 것보다, 작은 블록 단위로 생각하면 계산의 흐름이 훨씬 잘 보이기 때문이다. 특히 행렬이 어떤 구조를 가지고 있을 때, 예를 들어 왼쪽 위 부분은 어떤 역할을 하고 오른쪽 아래 부분은 다른 역할을 하는 식으로 나뉘어 있을 때, 블록으로 보는 순간 그 구조가 눈에 띄기 시작한다.

블록행렬의 덧셈

블록행렬을 이해할 때 가장 먼저 확인할 수 있는 연산은 덧셈이다. 덧셈은 비교적 쉽다. 같은 위치에 있는 블록끼리 더하면 된다.

두 블록행렬

A=[A11A12A21A22],B=[B11B12B21B22]A = \begin{bmatrix} A_{11} & A_{12} \\ A_{21} & A_{22} \end{bmatrix}, \quad B = \begin{bmatrix} B_{11} & B_{12} \\ B_{21} & B_{22} \end{bmatrix}

가 있을 때, 덧셈은 다음처럼 한다.

A+B=[A11+B11A12+B12A21+B21A22+B22]A + B = \begin{bmatrix} A_{11} + B_{11} & A_{12} + B_{12} \\ A_{21} + B_{21} & A_{22} + B_{22} \end{bmatrix}

겉으로만 보면 정말 단순하다. 왼쪽 위끼리 더하고, 오른쪽 위끼리 더하고, 왼쪽 아래끼리 더하고, 오른쪽 아래끼리 더한다. 그런데 여기서 “끼리”라는 말이 중요하다. 왜냐하면 블록끼리 더하려면 그 블록들의 크기가 서로 같아야 하기 때문이다. 보통의 행렬 덧셈에서도 크기가 같아야 더할 수 있었듯이, 블록끼리의 덧셈에서도 각 블록의 크기가 맞아야 한다.

아주 작은 예시부터 보자. 각 블록이 1×11 \times 1 행렬이라고 생각하면 다음과 같다.

A=[[1][2][3][4]],B=[[5][6][7][8]]A = \begin{bmatrix} \begin{bmatrix} 1 \end{bmatrix} & \begin{bmatrix} 2 \end{bmatrix} \\ \begin{bmatrix} 3 \end{bmatrix} & \begin{bmatrix} 4 \end{bmatrix} \end{bmatrix}, \quad B = \begin{bmatrix} \begin{bmatrix} 5 \end{bmatrix} & \begin{bmatrix} 6 \end{bmatrix} \\ \begin{bmatrix} 7 \end{bmatrix} & \begin{bmatrix} 8 \end{bmatrix} \end{bmatrix}

그러면 각 위치에서 블록끼리 더해서

A+B=[[6][8][10][12]]A + B = \begin{bmatrix} \begin{bmatrix} 6 \end{bmatrix} & \begin{bmatrix} 8 \end{bmatrix} \\ \begin{bmatrix} 10 \end{bmatrix} & \begin{bmatrix} 12 \end{bmatrix} \end{bmatrix}

가 된다.

이 예시는 사실상 숫자 덧셈과 다를 바가 없어 보인다. 그래서 이제 조금 더 진짜 블록행렬 같은 예시를 보자.

A=[[1234][5678][9101112][13141516]]A = \begin{bmatrix} \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} & \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} \\ \begin{bmatrix} 9 & 10 \\ 11 & 12 \end{bmatrix} & \begin{bmatrix} 13 & 14 \\ 15 & 16 \end{bmatrix} \end{bmatrix} B=[[10101010][20202020][30303030][40404040]]B = \begin{bmatrix} \begin{bmatrix} 10 & 10 \\ 10 & 10 \end{bmatrix} & \begin{bmatrix} 20 & 20 \\ 20 & 20 \end{bmatrix} \\ \begin{bmatrix} 30 & 30 \\ 30 & 30 \end{bmatrix} & \begin{bmatrix} 40 & 40 \\ 40 & 40 \end{bmatrix} \end{bmatrix}

그러면 왼쪽 위 블록끼리 더하면

[1234]+[10101010]=[11121314]\begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} + \begin{bmatrix} 10 & 10 \\ 10 & 10 \end{bmatrix} = \begin{bmatrix} 11 & 12 \\ 13 & 14 \end{bmatrix}

오른쪽 위 블록끼리 더하면

[5678]+[20202020]=[25262728]\begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} + \begin{bmatrix} 20 & 20 \\ 20 & 20 \end{bmatrix} = \begin{bmatrix} 25 & 26 \\ 27 & 28 \end{bmatrix}

왼쪽 아래 블록끼리 더하면

[9101112]+[30303030]=[39404142]\begin{bmatrix} 9 & 10 \\ 11 & 12 \end{bmatrix} + \begin{bmatrix} 30 & 30 \\ 30 & 30 \end{bmatrix} = \begin{bmatrix} 39 & 40 \\ 41 & 42 \end{bmatrix}

오른쪽 아래 블록끼리 더하면

[13141516]+[40404040]=[53545556]\begin{bmatrix} 13 & 14 \\ 15 & 16 \end{bmatrix} + \begin{bmatrix} 40 & 40 \\ 40 & 40 \end{bmatrix} = \begin{bmatrix} 53 & 54 \\ 55 & 56 \end{bmatrix}

따라서 전체 결과는

A+B=[[11121314][25262728][39404142][53545556]]A + B = \begin{bmatrix} \begin{bmatrix} 11 & 12 \\ 13 & 14 \end{bmatrix} & \begin{bmatrix} 25 & 26 \\ 27 & 28 \end{bmatrix} \\ \begin{bmatrix} 39 & 40 \\ 41 & 42 \end{bmatrix} & \begin{bmatrix} 53 & 54 \\ 55 & 56 \end{bmatrix} \end{bmatrix}

가 된다.

이 계산은 사실 아주 자연스럽다. 왜냐하면 큰 행렬 전체를 한 번에 더해도 결국 같은 위치의 숫자끼리 더하는 것이고, 블록 단위로 나누어도 결국 각 블록 안에서 같은 위치의 숫자끼리 더하는 것이기 때문이다. 즉, 블록으로 나누어도 덧셈의 원리는 전혀 바뀌지 않는다. 단지 계산을 보는 단위가 더 커졌을 뿐이다.

블록행렬의 정수배

정수배도 덧셈과 비슷하게 생각할 수 있다. 하나의 수를 행렬에 곱할 때는, 행렬 안의 모든 원소에 그 수를 곱했다. 블록행렬에서도 마찬가지다. 각 블록 전체에 그 수를 곱하면 된다.

일반식으로 쓰면 다음과 같다.

kA=[kA11kA12kA21kA22]kA = \begin{bmatrix} kA_{11} & kA_{12} \\ kA_{21} & kA_{22} \end{bmatrix}

즉, 스칼라 kk를 각 블록에 하나씩 분배하면 된다.

아주 단순한 예부터 다시 보자.

A=[[1][2][3][4]]A = \begin{bmatrix} \begin{bmatrix} 1 \end{bmatrix} & \begin{bmatrix} 2 \end{bmatrix} \\ \begin{bmatrix} 3 \end{bmatrix} & \begin{bmatrix} 4 \end{bmatrix} \end{bmatrix}

이라면

2A=[[2][4][6][8]]2A = \begin{bmatrix} \begin{bmatrix} 2 \end{bmatrix} & \begin{bmatrix} 4 \end{bmatrix} \\ \begin{bmatrix} 6 \end{bmatrix} & \begin{bmatrix} 8 \end{bmatrix} \end{bmatrix}

가 된다.

이제 실제 블록이 작은 행렬인 경우를 보자.

A=[[1234][5678][9101112][13141516]]A = \begin{bmatrix} \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} & \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} \\ \begin{bmatrix} 9 & 10 \\ 11 & 12 \end{bmatrix} & \begin{bmatrix} 13 & 14 \\ 15 & 16 \end{bmatrix} \end{bmatrix}

그러면 2A2A는 각 블록 안의 모든 원소를 두 배 하면 되므로,

2[1234]=[2468]2 \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} = \begin{bmatrix} 2 & 4 \\ 6 & 8 \end{bmatrix} 2[5678]=[10121416]2 \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} = \begin{bmatrix} 10 & 12 \\ 14 & 16 \end{bmatrix} 2[9101112]=[18202224]2 \begin{bmatrix} 9 & 10 \\ 11 & 12 \end{bmatrix} = \begin{bmatrix} 18 & 20 \\ 22 & 24 \end{bmatrix} 2[13141516]=[26283032]2 \begin{bmatrix} 13 & 14 \\ 15 & 16 \end{bmatrix} = \begin{bmatrix} 26 & 28 \\ 30 & 32 \end{bmatrix}

이므로 전체 결과는

2A=[[2468][10121416][18202224][26283032]]2A = \begin{bmatrix} \begin{bmatrix} 2 & 4 \\ 6 & 8 \end{bmatrix} & \begin{bmatrix} 10 & 12 \\ 14 & 16 \end{bmatrix} \\ \begin{bmatrix} 18 & 20 \\ 22 & 24 \end{bmatrix} & \begin{bmatrix} 26 & 28 \\ 30 & 32 \end{bmatrix} \end{bmatrix}

가 된다.

왜 이렇게 해도 될까. 이유는 간단하다. 큰 행렬 전체에 22를 곱하든, 블록을 나누어 각 블록에 22를 곱하든, 결국 모든 원소가 두 배 되는 것은 같기 때문이다. 블록으로 나누는 것은 원소를 바꾸는 일이 아니라, 보는 방식을 바꾸는 일이다. 그래서 이런 연산은 그대로 유지된다.

블록행렬의 곱은 왜 특별한가

덧셈과 정수배는 비교적 쉽게 받아들일 수 있다. 같은 위치끼리 더하거나, 각 부분에 똑같이 수를 곱하는 것은 자연스럽기 때문이다. 하지만 곱셈은 조금 다르다. 행렬의 곱은 원래도 쉽지 않다. 같은 위치끼리 그냥 곱하는 것이 아니라, 한 행과 한 열을 맞물리게 해서 계산하기 때문이다. 그래서 블록행렬의 곱도 될까 싶지만, 놀랍게도 된다. 그리고 더 놀라운 점은 모양까지 보통의 행렬 곱과 같다는 것이다.

가장 단순한 형태부터 보자.

A=[A11A12],B=[B11B21]A = \begin{bmatrix} A_{11} & A_{12} \end{bmatrix}, \quad B = \begin{bmatrix} B_{11} \\ B_{21} \end{bmatrix}

그러면 곱은

AB=A11B11+A12B21AB = A_{11}B_{11} + A_{12}B_{21}

이다.

이 식은 숫자로 된 행렬 곱을 배울 때 보던 모양과 똑같다. 숫자 대신 블록이 들어갔을 뿐이다. 즉, 블록행렬의 곱은 블록을 마치 원소처럼 놓고 계산해도 된다. 물론 여기서 “마치”가 중요하다. 진짜 숫자는 아니고 행렬이므로, 내부에서는 여전히 행렬 곱이 일어난다.

좀 더 일반적으로 쓰면, 블록행렬의 곱도 다음과 같은 형태를 따른다.

Cij=kAikBkjC_{ij} = \sum_{k} A_{ik} B_{kj}

이 식은 “CCijij번째 블록은, AAii번째 블록 행과 BBjj번째 블록 열을 곱해서 더한 것이다”라는 뜻이다. 말이 조금 길지만 원리는 익숙하다. 보통 행렬 곱에서 cijc_{ij}를 만들 때, AAii번째 행과 BBjj번째 열을 곱해서 더했듯이, 여기서는 그것을 블록 단위로 하는 것이다.

가장 작은 블록곱 예시

먼저 정말 작은 예시로 감각을 잡자.

A=[12],B=[34]A = \begin{bmatrix} 1 & 2 \end{bmatrix}, \quad B = \begin{bmatrix} 3 \\ 4 \end{bmatrix}

이 둘의 곱은

AB=13+24=11AB = 1 \cdot 3 + 2 \cdot 4 = 11

이다.

이 계산은 익숙하다. 첫 번째 것끼리 곱하고, 두 번째 것끼리 곱해서 더했다. 이제 이 모양을 블록행렬에도 그대로 가져간다고 생각하면 된다.

블록행렬의 곱을 실제로 계산해보기

다음처럼 블록이 실제 행렬인 경우를 보자.

A=[[10][21]]A = \begin{bmatrix} \begin{bmatrix} 1 & 0 \end{bmatrix} & \begin{bmatrix} 2 & 1 \end{bmatrix} \end{bmatrix} B=[[13][24]]B = \begin{bmatrix} \begin{bmatrix} 1 \\ 3 \end{bmatrix} \\ \begin{bmatrix} 2 \\ 4 \end{bmatrix} \end{bmatrix}

겉모양만 보면

AB=A1B1+A2B2AB = A_1 B_1 + A_2 B_2

형태이다. 여기서

A1=[10],A2=[21]A_1 = \begin{bmatrix} 1 & 0 \end{bmatrix}, \quad A_2 = \begin{bmatrix} 2 & 1 \end{bmatrix} B1=[13],B2=[24]B_1 = \begin{bmatrix} 1 \\ 3 \end{bmatrix}, \quad B_2 = \begin{bmatrix} 2 \\ 4 \end{bmatrix}

이다.

그러면 첫 번째 곱은

A1B1=[10][13]A_1 B_1 = \begin{bmatrix} 1 & 0 \end{bmatrix} \begin{bmatrix} 1 \\ 3 \end{bmatrix}

이다. 이 계산은 1×1+0×31 \times 1 + 0 \times 3이므로

A1B1=1A_1 B_1 = 1

이다.

두 번째 곱은

A2B2=[21][24]A_2 B_2 = \begin{bmatrix} 2 & 1 \end{bmatrix} \begin{bmatrix} 2 \\ 4 \end{bmatrix}

이고, 이는 2×2+1×42 \times 2 + 1 \times 4이므로

A2B2=8A_2 B_2 = 8

이다.

따라서 전체 곱은

AB=A1B1+A2B2=1+8=9AB = A_1 B_1 + A_2 B_2 = 1 + 8 = 9

가 된다.

이 계산에서 중요한 것은, 블록 하나하나를 숫자처럼 적어놓고 계산했지만 사실 그 안에서는 작은 행렬 곱이 일어났다는 점이다. 그리고 그 결과들을 더해서 최종 결과를 만들었다. 즉, 큰 문제를 작은 문제 두 개로 나누어 푼 셈이다.

조금 더 큰 블록곱 예시

이제 2×22 \times 2 블록 구조를 가진 예시를 보자. 다음과 같은 블록행렬을 생각하자.

A=[[1][2][3][4]],B=[[5][6][7][8]]A = \begin{bmatrix} \begin{bmatrix} 1 \end{bmatrix} & \begin{bmatrix} 2 \end{bmatrix} \\ \begin{bmatrix} 3 \end{bmatrix} & \begin{bmatrix} 4 \end{bmatrix} \end{bmatrix}, \quad B = \begin{bmatrix} \begin{bmatrix} 5 \end{bmatrix} & \begin{bmatrix} 6 \end{bmatrix} \\ \begin{bmatrix} 7 \end{bmatrix} & \begin{bmatrix} 8 \end{bmatrix} \end{bmatrix}

각 블록이 1×11 \times 1 행렬이므로 사실상 숫자와 같다. 하지만 블록곱 공식을 그대로 적용해보자.

결과를

AB=[C11C12C21C22]AB = \begin{bmatrix} C_{11} & C_{12} \\ C_{21} & C_{22} \end{bmatrix}

라고 하면,

C11=A11B11+A12B21C_{11} = A_{11}B_{11} + A_{12}B_{21} C12=A11B12+A12B22C_{12} = A_{11}B_{12} + A_{12}B_{22} C21=A21B11+A22B21C_{21} = A_{21}B_{11} + A_{22}B_{21} C22=A21B12+A22B22C_{22} = A_{21}B_{12} + A_{22}B_{22}

이다.

이제 하나씩 계산하면,

C11=[1][5]+[2][7]=[19]C_{11} = \begin{bmatrix} 1 \end{bmatrix} \begin{bmatrix} 5 \end{bmatrix} + \begin{bmatrix} 2 \end{bmatrix} \begin{bmatrix} 7 \end{bmatrix} = \begin{bmatrix} 19 \end{bmatrix} C12=[1][6]+[2][8]=[22]C_{12} = \begin{bmatrix} 1 \end{bmatrix} \begin{bmatrix} 6 \end{bmatrix} + \begin{bmatrix} 2 \end{bmatrix} \begin{bmatrix} 8 \end{bmatrix} = \begin{bmatrix} 22 \end{bmatrix} C21=[3][5]+[4][7]=[43]C_{21} = \begin{bmatrix} 3 \end{bmatrix} \begin{bmatrix} 5 \end{bmatrix} + \begin{bmatrix} 4 \end{bmatrix} \begin{bmatrix} 7 \end{bmatrix} = \begin{bmatrix} 43 \end{bmatrix} C22=[3][6]+[4][8]=[50]C_{22} = \begin{bmatrix} 3 \end{bmatrix} \begin{bmatrix} 6 \end{bmatrix} + \begin{bmatrix} 4 \end{bmatrix} \begin{bmatrix} 8 \end{bmatrix} = \begin{bmatrix} 50 \end{bmatrix}

따라서

AB=[[19][22][43][50]]AB = \begin{bmatrix} \begin{bmatrix} 19 \end{bmatrix} & \begin{bmatrix} 22 \end{bmatrix} \\ \begin{bmatrix} 43 \end{bmatrix} & \begin{bmatrix} 50 \end{bmatrix} \end{bmatrix}

가 된다.

이 예시는 사실 보통의 2×22 \times 2 행렬 곱과 똑같다. 하지만 중요한 것은, 블록행렬의 곱도 정확히 같은 규칙을 따른다는 감각을 익히는 것이다. 즉, 행렬의 곱 모양을 그대로 유지한 채로, 원소 대신 블록을 넣어도 계산이 된다는 것이 핵심이다.

왜 이렇게 계산해도 되는가

처음에는 “작은 행렬을 숫자처럼 취급해도 정말 괜찮나?” 하는 느낌이 들 수 있다. 이때 중요한 것은, 숫자처럼 마구 취급하는 것이 아니라, 곱셈의 구조가 같다는 것이다.

보통 행렬 곱에서는 한 칸의 결과를 만들기 위해 행 하나와 열 하나를 맞춰서 곱하고 더한다. 블록행렬에서도 정확히 같은 일이 일어난다. 다만 숫자 하나씩 곱하는 대신, 블록 하나씩 곱한다. 그리고 그 블록곱의 결과들을 더한다. 즉, 큰 행렬의 행과 열을 작은 덩어리로 묶어서 같은 규칙을 적용하는 것이다.

그래서 블록행렬의 곱은 단순한 편법이 아니다. 행렬 곱의 구조를 더 큰 단위에서 다시 보는 것이다. 이런 점에서 블록행렬은 계산 요령이기도 하지만, 동시에 행렬을 바라보는 관점이기도 하다.

한 방향으로만 나누면 벡터가 보인다

지금까지는 큰 행렬을 네 조각, 혹은 여러 직사각형 조각으로 나누는 것을 보았다. 그런데 블록행렬의 특별한 경우로, 한 방향으로만 나누는 것도 생각할 수 있다. 이것이 바로 행벡터와 열벡터를 보는 관점으로 이어진다.

예를 들어 행렬 AA를 세로 방향으로만 나누어 보자. 그러면 각 조각은 하나의 열이 된다.

A=[a1;a2;;am]A = [a_1 ; a_2 ; \cdots ; a_m]

이 식은 AA가 여러 개의 열벡터 a1,a2,,ama_1, a_2, \dots, a_m로 이루어져 있다는 뜻이다. 각 aia_in×1n \times 1 크기의 열벡터이다.

이 표현을 처음 보면 단순히 기호를 바꾼 것처럼 느껴질 수 있다. 하지만 사실은 굉장히 중요한 관점 변화가 들어 있다. 원래는 AA를 숫자들이 빽빽하게 들어 있는 표로 봤다면, 이제는 “여러 개의 열벡터를 옆으로 붙여 놓은 것”으로 보는 것이다.

예를 들어

A=[123456]A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}

라면, 이것을

A=[14][25][36]A = \begin{bmatrix} 1 \\ 4 \end{bmatrix} \quad \begin{bmatrix} 2 \\ 5 \end{bmatrix} \quad \begin{bmatrix} 3 \\ 6 \end{bmatrix}

라고 나누어 볼 수 있고, 간단히

A=[a1;a2;a3]A = [a_1 ; a_2 ; a_3]

라고 쓴다. 여기서

a1=[14],a2=[25],a3=[36]a_1 = \begin{bmatrix} 1 \\ 4 \end{bmatrix}, \quad a_2 = \begin{bmatrix} 2 \\ 5 \end{bmatrix}, \quad a_3 = \begin{bmatrix} 3 \\ 6 \end{bmatrix}

이다.

반대로 행렬 BB를 가로 방향으로만 나누면 각 조각은 하나의 행이 된다. 이때는 보통 행벡터로 쓴다.

B=[b1Tb2TbmT]B = \begin{bmatrix} b_1^T \\ b_2^T \\ \vdots \\ b_m^T \end{bmatrix}

여기서 각 bjTb_j^T1×n1 \times n 크기의 행벡터이다.

예를 들어

B=[123456]B = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix}

라면

b1T=[12],b2T=[34],b3T=[56]b_1^T = \begin{bmatrix} 1 & 2 \end{bmatrix}, \quad b_2^T = \begin{bmatrix} 3 & 4 \end{bmatrix}, \quad b_3^T = \begin{bmatrix} 5 & 6 \end{bmatrix}

로 볼 수 있고,

B=[b1Tb2Tb3T]B = \begin{bmatrix} b_1^T \\ b_2^T \\ b_3^T \end{bmatrix}

라고 쓴다.

즉, 행렬은 열벡터들의 묶음으로도 볼 수 있고, 행벡터들의 묶음으로도 볼 수 있다. 이것은 블록행렬의 아주 자연스러운 특별한 경우다. 블록 하나하나의 너비를 11로 잡으면 열벡터가 되고, 높이를 11로 잡으면 행벡터가 된다.

행렬의 곱을 열벡터와 행벡터로 다시 쓰기

이제 블록행렬의 관점을 이용하면 행렬의 곱을 아주 흥미롭게 쓸 수 있다.

행렬 AA의 열벡터들이 a1,a2,,ama_1, a_2, \dots, a_m이고, 행렬 BB의 행벡터들이 b1T,b2T,,bmTb_1^T, b_2^T, \dots, b_m^T라고 하자. 그러면 행렬의 곱 ABAB는 다음처럼 쓸 수 있다.

AB=k=1makbkTAB = \sum_{k=1}^{m} a_k b_k^T

이 식은 처음 보면 조금 낯설다. 하지만 뜻을 천천히 보면 아주 아름답다. “행렬의 곱 ABAB는, AA의 열벡터 하나와 BB의 행벡터 하나를 곱해서 만든 행렬들을 전부 더한 것”이라는 뜻이다.

즉, 큰 행렬 곱 하나가 사실은 여러 개의 작은 조각 행렬의 합으로 이루어진다는 말이다.

이걸 아주 작은 예로 확인해보자.

A=[1234]A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} B=[5678]B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix}

그러면 AA의 열벡터는

a1=[13],a2=[24]a_1 = \begin{bmatrix} 1 \\ 3 \end{bmatrix}, \quad a_2 = \begin{bmatrix} 2 \\ 4 \end{bmatrix}

이고, BB의 행벡터는

b1T=[56],b2T=[78]b_1^T = \begin{bmatrix} 5 & 6 \end{bmatrix}, \quad b_2^T = \begin{bmatrix} 7 & 8 \end{bmatrix}

이다.

그러므로

AB=a1b1T+a2b2TAB = a_1 b_1^T + a_2 b_2^T

가 된다.

이제 각각을 계산해보자.

먼저

a1b1T=[13][56]=[561518]a_1 b_1^T = \begin{bmatrix} 1 \\ 3 \end{bmatrix} \begin{bmatrix} 5 & 6 \end{bmatrix} = \begin{bmatrix} 5 & 6 \\ 15 & 18 \end{bmatrix}

이다.

그리고

a2b2T=[24][78]=[14162832]a_2 b_2^T = \begin{bmatrix} 2 \\ 4 \end{bmatrix} \begin{bmatrix} 7 & 8 \end{bmatrix} = \begin{bmatrix} 14 & 16 \\ 28 & 32 \end{bmatrix}

이다.

이 둘을 더하면

AB=[561518]+[14162832]=[19224350]AB = \begin{bmatrix} 5 & 6 \\ 15 & 18 \end{bmatrix} + \begin{bmatrix} 14 & 16 \\ 28 & 32 \end{bmatrix} = \begin{bmatrix} 19 & 22 \\ 43 & 50 \end{bmatrix}

가 된다.

실제로 보통 방식으로 행렬 곱을 계산해도 같은 결과가 나온다. 그런데 이 표현의 좋은 점은, 행렬 곱을 “열벡터와 행벡터가 만들어내는 작은 행렬들의 합”으로 볼 수 있다는 것이다. 즉, 결과 행렬이 어떻게 쌓여 가는지를 더 구조적으로 볼 수 있다.

이 관점은 나중에 저랭크 근사나 외적 분해 같은 내용을 배울 때도 아주 중요해진다. 하지만 지금 단계에서는 “행렬의 곱도 작은 블록들의 합으로 볼 수 있다”는 감각을 얻는 것으로 충분하다.