Ch.2 §2.4 — Rules for Matrix Operations

행렬 연산 규칙 — 덧셈·곱셈·블록 분할의 네 가지 관점

행렬 덧셈과 스칼라 곱의 기본 규칙, 행렬 곱셈의 네 가지 관점(내적·열·행·열×행), 교환 법칙이 깨지는 이유, 블록 행렬 곱셈과 슈어 여인수까지 직관 중심으로 다룬다.

Math
Linear Algebra
저자

Kwangmin Kim

공개

2026년 04월 08일

1 이 절이 다루는 것

§2.3에서 행 연산을 소거 행렬 \(E_{ij}\) 로 표현했다. 이 절에서는 한 걸음 더 나아가 행렬 자체를 대상으로 한 연산 규칙을 체계화한다.

노트

§2.4의 핵심 질문

  1. 행렬을 언제 더하고 곱할 수 있는가? (모양 조건)
  2. 행렬 곱셈을 보는 네 가지 방법은 무엇인가?
  3. 어떤 법칙은 성립하고 어떤 법칙은 깨지는가?
  4. 행렬을 블록으로 쪼개면 어떤 이점이 있는가?

2 행렬 덧셈과 스칼라 곱

2.1 기본 규칙

행렬 덧셈은 같은 모양의 행렬에서만 가능하다. 같은 위치의 원소끼리 더한다.

\[ \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 0 & 0 \end{bmatrix} + \begin{bmatrix} 2 & 2 \\ 4 & 4 \\ 9 & 9 \end{bmatrix} = \begin{bmatrix} 3 & 4 \\ 7 & 8 \\ 9 & 9 \end{bmatrix} \]

스칼라 \(c\) 를 행렬에 곱하면 모든 원소에 \(c\) 를 곱한다.

\[ 2 \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 0 & 0 \end{bmatrix} = \begin{bmatrix} 2 & 4 \\ 6 & 8 \\ 0 & 0 \end{bmatrix} \]

직관: 행렬을 “벡터들의 배열”로 보면 덧셈과 스칼라 곱은 벡터 연산의 자연스러운 확장이다. 열벡터는 열이 하나인 행렬(\(n = 1\))의 특수한 경우다.

2.2 영 행렬과 음수 행렬

  • 영 행렬(Zero Matrix) \(\mathbf{0}\): 모든 원소가 0. \(A + \mathbf{0} = A\).
  • 음수 행렬 \(-A\): \(c = -1\) 을 곱한 것. 모든 부호를 반전. \(A + (-A) = \mathbf{0}\).

2.3 원소 표기

행렬 \(A\)\(i\)\(j\) 열 원소를 \(a_{ij}\) 또는 \(A(i,j)\) 로 쓴다. \(i\)\(1\) 부터 \(m\) 까지, \(j\)\(1\) 부터 \(n\) 까지이다.


3 행렬 곱셈 — 언제 가능한가

3.1 모양 조건

\[ \underbrace{A}_{m \times n} \underbrace{B}_{n \times p} = \underbrace{AB}_{m \times p} \]

\(A\) 의 열 수 = \(B\) 의 행 수 이어야 한다. 이 조건이 맞으면 \(AB\)\(m \times p\) 행렬이 된다.

직관: \(A\) 의 각 행은 길이 \(n\) 의 벡터이고, \(B\) 의 각 열도 길이 \(n\) 의 벡터이어야 내적(dot product)이 정의된다. 길이가 맞아야 곱할 수 있다.

\(A\) 모양 \(B\) 모양 \(AB\) 가능? \(AB\) 모양
\(3 \times 2\) \(2 \times 4\) 가능 \(3 \times 4\)
\(3 \times 2\) \(3 \times 2\) 불가
\(1 \times n\) \(n \times 1\) 가능 \(1 \times 1\) (스칼라)
\(n \times 1\) \(1 \times n\) 가능 \(n \times n\)

4 행렬 곱셈의 네 가지 방법

같은 \(AB\) 를 네 가지 관점으로 볼 수 있다. 모두 동일한 결과를 주지만, 어떤 관점을 쓰느냐에 따라 이해의 깊이가 달라진다.

4.1 방법 1: 내적 방법 (표준 방법)

\((AB)_{ij}\) = \(A\)\(i\) 번째 행과 \(B\)\(j\) 번째 열의 내적.

\[ (AB)_{ij} = \sum_{k=1}^{n} a_{ik} b_{kj} = a_{i1}b_{1j} + a_{i2}b_{2j} + \cdots + a_{in}b_{nj} \]

직관: \(n \times n\) 행렬 두 개를 곱하면 \(n^2\) 개의 내적이 필요하고, 각 내적에 \(n\) 번의 곱이 필요하므로 총 \(n^3\) 번의 곱셈이 필요하다. \(n = 100\) 이면 100만 번.

예시 (\(2 \times 2\)):

\[ \begin{bmatrix} 1 & 1 \\ 2 & -1 \end{bmatrix} \begin{bmatrix} 2 & 2 \\ 3 & 4 \end{bmatrix} = \begin{bmatrix} 1\cdot2+1\cdot3 & 1\cdot2+1\cdot4 \\ 2\cdot2+(-1)\cdot3 & 2\cdot2+(-1)\cdot4 \end{bmatrix} = \begin{bmatrix} 5 & 6 \\ 1 & 0 \end{bmatrix} \]

4.2 방법 2: 열 방법 — \(A\)\(B\) 의 각 열에 작용

\(B = [b_1 \; b_2 \; \cdots \; b_p]\) 로 열 분해하면:

\[ AB = A[b_1 \; b_2 \; \cdots \; b_p] = [Ab_1 \; Ab_2 \; \cdots \; Ab_p] \]

\(AB\)\(j\) 번째 열 = \(A \times (B\)\(j\) 번째 열 \()\).

직관: \(B\) 의 각 열을 독립적인 \(Ax = b_j\) 문제의 우변으로 볼 수 있다. \(A\)\(b_j\) 각각에 따로 작용하고, 그 결과들을 나란히 붙인 것이 \(AB\) 이다.

4.3 방법 3: 행 방법 — \(A\) 의 각 행이 \(B\) 전체에 작용

\(A\)\(i\) 번째 행 \(= \text{row}_i(A)\) 로 표기하면:

\[ \text{row}_i(AB) = \text{row}_i(A) \cdot B \]

\(AB\)\(i\) 번째 행 = \(A\)\(i\) 번째 행 \(\times B\) = \(B\) 의 행들의 선형 결합.

직관: §2.3의 소거 행렬에서 본 것과 같다. \(E_{21}A\) 에서 \(E_{21}\) 의 각 행이 \(A\) 의 행들 중 어떤 것을 얼마만큼 합칠지 지시했다. 그것이 방법 3의 일반화이다.

4.4 방법 4: 열×행 방법 (외적 합 / Outer Product Sum)

\(A\)\(k\) 번째 열 \(a_k\) (\(m \times 1\))와 \(B\)\(k\) 번째 행 \(b_k^\top\) (\(1 \times p\))를 곱하면 랭크 1 행렬(\(m \times p\))이 만들어진다. \(AB\) 는 이들의 합이다.

\[ AB = \sum_{k=1}^{n} \underbrace{a_k}_{m \times 1} \underbrace{b_k^\top}_{1 \times p} = a_1 b_1^\top + a_2 b_2^\top + \cdots + a_n b_n^\top \]

구체적 예시:

\[ \begin{bmatrix} 1 & 4 \\ 1 & 5 \end{bmatrix} \begin{bmatrix} 3 & 2 \\ 1 & 0 \end{bmatrix} = \underbrace{\begin{bmatrix} 1 \\ 1 \end{bmatrix}\begin{bmatrix} 3 & 2 \end{bmatrix}}_{\text{열 1} \times \text{행 1}} + \underbrace{\begin{bmatrix} 4 \\ 5 \end{bmatrix}\begin{bmatrix} 1 & 0 \end{bmatrix}}_{\text{열 2} \times \text{행 2}} = \begin{bmatrix} 3 & 2 \\ 3 & 2 \end{bmatrix} + \begin{bmatrix} 4 & 0 \\ 5 & 0 \end{bmatrix} = \begin{bmatrix} 7 & 2 \\ 8 & 2 \end{bmatrix} \]

직관: \(AB\)랭크 1 행렬들의 합으로 분해한다. 각 항은 \(A\) 의 열 하나와 \(B\) 의 행 하나가 만드는 “단순한 구조”이다. 이 관점은 SVD에서 핵심이 된다.

노트

네 가지 방법 비교

방법 계산 단위 결과 원소
내적 (행×열) \((AB)_{ij}\) = 스칼라 1개 내적 1번
열 방법 \(AB\) 의 열 1개 \(Ax\) 1번
행 방법 \(AB\) 의 행 1개 행 결합 1번
열×행 방법 랭크 1 행렬 1개 전체의 부분합

곱셈 횟수(\(n^3\) 또는 \(mnp\))는 모두 동일하다. 관점만 다르다.


5 행렬 연산의 법칙들

5.1 성립하는 법칙들

덧셈 법칙 (3개):

\[ A + B = B + A \quad (\text{교환 법칙}) \]

\[ c(A + B) = cA + cB \quad (\text{분배 법칙}) \]

\[ A + (B + C) = (A + B) + C \quad (\text{결합 법칙}) \]

곱셈 법칙 (3개):

\[ C(A + B) = CA + CB \quad (\text{왼쪽 분배 법칙}) \]

\[ (A + B)C = AC + BC \quad (\text{오른쪽 분배 법칙}) \]

\[ A(BC) = (AB)C \quad (\text{결합 법칙}) \]

\(A(B+C) = AB + AC\) 인가? 한 열씩 확인하면 된다. \(j\) 번째 열만 보면 \(A(b_j + c_j) = Ab_j + Ac_j\) — 이것이 선형성이다.

\(A(BC) = (AB)C\) 인가? 행렬 곱이 함수 합성이기 때문이다. \(v\)\(C\), \(B\), \(A\) 순으로 적용하는 순서는 괄호 위치와 무관하게 고정된다.

5.2 깨지는 법칙: 교환 법칙

\[ AB \neq BA \quad (\text{일반적}) \]

구체적 반례:

\[ BA = \begin{bmatrix} 0 & 1 \\ 0 & 0 \end{bmatrix} \begin{bmatrix} 0 & 0 \\ 1 & 0 \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ 0 & 0 \end{bmatrix} \quad \neq \quad AB = \begin{bmatrix} 0 & 0 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} 0 & 1 \\ 0 & 0 \end{bmatrix} = \begin{bmatrix} 0 & 0 \\ 0 & 1 \end{bmatrix} \]

왜 성립하지 않는가?

\(AB\): \(B\) 가 먼저 변환하고, \(A\) 가 그 결과에 작용한다. \(BA\): \(A\) 가 먼저, \(B\) 가 나중이다. 각 변환이 상태를 바꿔놓기 때문에 순서가 달라지면 결과도 달라진다.

경고

교환 법칙이 성립하는 예외적 경우

  • 단위 행렬: \(AI = IA\)\(I\) 는 모든 행렬과 교환된다.
  • 스칼라 행렬: \(A(cI) = (cI)A\)\(cI\) 형태의 행렬만 모든 행렬과 교환된다.
  • 모양이 다른 경우: \(A\)\(m \times n\), \(B\)\(n \times m\) (\(m \neq n\))이면 \(AB\)\(m \times m\), \(BA\)\(n \times n\) 으로 크기 자체가 달라 비교 불가.

5.3 행렬의 거듭제곱

\(A\) 가 정사각 행렬(\(n \times n\))이면 거듭제곱이 정의된다.

\[ A^p = \underbrace{A \cdot A \cdots A}_{p\text{ 개}} \]

결합 법칙 덕분에 지수 법칙이 성립한다.

\[ A^p A^q = A^{p+q}, \quad (A^p)^q = A^{pq} \]

\(A^0 = I\) (영 거듭제곱 = 단위 행렬). \(A^{-1}\) 이 존재하면 \(A^{-p} = (A^{-1})^p\).

5.4 대각합 (Trace)

정의: 대각합

정사각 행렬 \(A \in \mathbb{R}^{n \times n}\)대각합(trace)은 주대각선 원소들의 합이다.

\[\operatorname{tr}(A) = \sum_{i=1}^{n} a_{ii}\]

핵심 성질:

  • 선형성: \(\operatorname{tr}(A + B) = \operatorname{tr}(A) + \operatorname{tr}(B)\), \(\operatorname{tr}(cA) = c \operatorname{tr}(A)\)
  • 전치 불변: \(\operatorname{tr}(A^\top) = \operatorname{tr}(A)\)
  • 순환 성질: \(\operatorname{tr}(AB) = \operatorname{tr}(BA)\) (크기 조건만 맞으면 성립)
  • 이로부터 \(\operatorname{tr}(ABC) = \operatorname{tr}(BCA) = \operatorname{tr}(CAB)\) (순환 이동 가능, 임의 순서 교환은 아님)

왜 중요한가: Ch.6에서 \(\operatorname{tr}(A) =\) 고윳값의 합이라는 사실이 증명된다. 따라서 대각합은 기저 변환 아래 불변이다 — 이것이 \(\operatorname{tr}(P^{-1}AP) = \operatorname{tr}(A)\) 의 의미이다. 행렬식이 “고윳값의 곱”인 것과 대칭이다.

예시: \(\operatorname{tr}\!\begin{bmatrix} 2 & 3 & 1 \\ 0 & 5 & 2 \\ 1 & 1 & 4 \end{bmatrix} = 2 + 5 + 4 = 11\)


6 블록 행렬과 블록 곱셈

6.1 블록 분할의 아이디어

큰 행렬을 블록(block)이라 부르는 작은 행렬들로 분할할 수 있다. 블록이 맞게 맞으면 블록 단위로 더하고 곱할 수 있다.

\[ 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\) 의 행 분할이 일치해야 한다.

\[ AB = \begin{bmatrix} A_{11}B_{11} + A_{12}B_{21} & \cdots \\ A_{21}B_{11} + A_{22}B_{21} & \cdots \end{bmatrix} \]

블록들을 마치 숫자처럼 취급해 곱하면 된다. 단, 블록끼리는 \(A\) 앞, \(B\) 뒤의 순서를 지킨다.

왜 블록 분할이 유용한가?

  • 구조가 보인다 — 반복되는 패턴을 명시적으로 표현한다.
  • 확장 행렬 \([A \mid b]\) 도 블록: \(E[A \mid b] = [EA \mid Eb]\) 는 블록 곱셈이다.
  • 병렬 계산: 블록을 독립적으로 처리할 수 있다.

6.2 열×행 분해 = 블록 곱셈의 특수 경우

\(A\) 의 블록 = \(n\) 개의 열, \(B\) 의 블록 = \(n\) 개의 행으로 분할하면:

\[ AB = [a_1 \; \cdots \; a_n] \begin{bmatrix} b_1^\top \\ \vdots \\ b_n^\top \end{bmatrix} = a_1 b_1^\top + \cdots + a_n b_n^\top \]

이것이 §2.4의 방법 4(열×행)이다. 블록 곱셈의 관점에서 자연스럽게 유도된다.

6.3 블록 소거와 슈어 여인수

2×2 블록 행렬 \(A\) 를 소거하면:

\[ \begin{bmatrix} I & 0 \\ -CA^{-1} & I \end{bmatrix} \begin{bmatrix} A & B \\ C & D \end{bmatrix} = \begin{bmatrix} A & B \\ 0 & \underbrace{D - CA^{-1}B}_{S} \end{bmatrix} \]

\(S = D - CA^{-1}B\)슈어 여인수(Schur complement)라 한다. 스칼라 소거에서 \(d - cb/a\) 의 블록 버전이다.

직관: 피벗 블록 \(A\) 에 대한 소거를 수행하면, 나머지 블록(\(D\))에서 “\(A\) 를 통한 간섭”을 제거한 나머지(\(S\))가 남는다. 이 \(S\) 가 다음 단계 소거의 피벗 블록이 된다.


7 직관 정리: 왜 각 관점이 필요한가

관점 핵심 질문 언제 유용한가
내적 (행×열) \((AB)_{ij} = ?\) 특정 원소 계산, 기본 정의
열 방법 \(AB\)\(j\) 열 = ? \(Ax = b\) 시스템 이해, 열 공간 분석
행 방법 \(AB\)\(i\) 행 = ? 소거 행렬, 행 공간 분석
열×행 방법 \(AB\) = 랭크 1 행렬들의 합? SVD, 저차원 근사, 외적 구조 이해
블록 방법 큰 행렬의 구조는? 병렬 계산, 구조화된 행렬 분석

8 Worked Examples

8.1 예시 1: 내적 방법 vs 열×행 방법

\[ AB = \begin{bmatrix} 3 & 4 \\ 1 & 5 \\ 2 & 0 \end{bmatrix} \begin{bmatrix} 2 & 4 \\ 1 & 1 \end{bmatrix} \]

내적 방법 (6번의 내적):

\[ AB = \begin{bmatrix} 3 \cdot 2 + 4 \cdot 1 & 3 \cdot 4 + 4 \cdot 1 \\ 1 \cdot 2 + 5 \cdot 1 & 1 \cdot 4 + 5 \cdot 1 \\ 2 \cdot 2 + 0 \cdot 1 & 2 \cdot 4 + 0 \cdot 1 \end{bmatrix} = \begin{bmatrix} 10 & 16 \\ 7 & 9 \\ 4 & 8 \end{bmatrix} \]

열×행 방법 (랭크 1 행렬 2개의 합):

\[ AB = \begin{bmatrix} 3 \\ 1 \\ 2 \end{bmatrix}\begin{bmatrix} 2 & 4 \end{bmatrix} + \begin{bmatrix} 4 \\ 5 \\ 0 \end{bmatrix}\begin{bmatrix} 1 & 1 \end{bmatrix} = \begin{bmatrix} 6 & 12 \\ 2 & 4 \\ 4 & 8 \end{bmatrix} + \begin{bmatrix} 4 & 4 \\ 5 & 5 \\ 0 & 0 \end{bmatrix} = \begin{bmatrix} 10 & 16 \\ 7 & 9 \\ 4 & 8 \end{bmatrix} \]

곱셈 횟수(\(3 \times 2 \times 2 = 12\) 번)는 같다. 순서만 다르다.

8.2 예시 2: 교환 법칙 성립 조건 탐색

\[ A = \begin{bmatrix} p & 0 \\ q & r \end{bmatrix},\quad B = \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} \]

\(AB\)\(BA\) 를 계산한다.

\[ AB = \begin{bmatrix} p & p \\ q+r & r+q... \end{bmatrix} = \begin{bmatrix} p & p \\ q & r \end{bmatrix}\begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} p & p \\ q & q+r \end{bmatrix} \]

\[ BA = \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix}\begin{bmatrix} p & 0 \\ q & r \end{bmatrix} = \begin{bmatrix} p+q & r \\ q & r \end{bmatrix} \]

\(AB = BA\) 이 되려면 \(p = p+q\) (→ \(q = 0\))이고 \(q+r = r\) (→ \(q = 0\))이어야 한다. 즉 \(q = 0\) 이어야 한다. \(A\) 가 대각 행렬일 때만 이 \(B\) 와 교환된다.

8.3 예시 3: 인접 행렬과 경로 수

방향 그래프에서 \(a_{ij} = 1\) (노드 \(i \to j\) 간선 존재), \(a_{ij} = 0\) (없음)으로 정의하면:

\[ A = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix} \quad \text{(노드 1→1, 1→2, 2→1 간선)} \]

\((A^2)_{ij}\) 는 2단계 경로의 수이다. 왜인가?

\[ (A^2)_{ij} = \sum_k a_{ik} a_{kj} \]

\(a_{ik} a_{kj} = 1\) iff 노드 \(i \to k\) 간선과 \(k \to j\) 간선이 모두 존재. 이 중간 노드 \(k\) 들의 합이 2단계 경로의 총수이다.

\[ A^2 = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}^2 = \begin{bmatrix} 2 & 1 \\ 1 & 1 \end{bmatrix} \]

\((A^2)_{11} = 2\): 노드 1에서 노드 1로의 2단계 경로는 \(1 \to 1 \to 1\), \(1 \to 2 \to 1\) 두 가지이다.

일반적으로 \((A^k)_{ij}\) 는 노드 \(i\) 에서 \(j\) 까지 \(k\) 단계 경로의 수이다. 행렬 거듭제곱이 경로 계산과 동치라는 아름다운 결과이다.


9 ML/DL에서의 연결

9.1 배치 처리 — 열 방법의 대규모 적용

딥러닝의 행렬 곱 \(Y = WX\) 에서:

  • \(W\): 가중치 행렬 (\(d_{\text{out}} \times d_{\text{in}}\))
  • \(X = [x_1 \; x_2 \; \cdots \; x_B]\): 배치 입력 (\(d_{\text{in}} \times B\))

열 방법으로 보면 \(WX\)\(j\) 번째 열 = \(Wx_j\) = \(j\) 번째 샘플의 출력. 배치 처리는 \(B\) 개의 \(Wx_j\) 를 열로 붙인 것이다.

9.2 어텐션 — 내적 방법의 응용

트랜스포머의 어텐션은 행렬 \(Q, K, V\) 로 구성된다.

\[ \text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right) V \]

\(QK^\top\) 는 내적 방법의 행렬 곱이다. \((QK^\top)_{ij}\) = \(Q\)\(i\) 번째 쿼리 벡터와 \(K\)\(j\) 번째 키 벡터의 내적 = 두 위치의 유사도(attention score).

9.3 SVD — 열×행 방법의 정점

열×행 방법에서 \(AB = \sum_k a_k b_k^\top\) 는 SVD의 직관적 전조이다.

\[ M = \sigma_1 u_1 v_1^\top + \sigma_2 u_2 v_2^\top + \cdots + \sigma_r u_r v_r^\top \]

\(M\) 을 랭크 1 행렬들의 합으로 표현하되, 각 항의 “크기”(\(\sigma_k\))가 감소하는 순으로 배열한 것이 SVD이다. 처음 \(k\) 개 항만 유지하면 최적의 랭크 \(k\) 근사가 된다.


10 코드로 확인하기

10.1 Step 1 — 네 가지 곱셈 방법 구현

import numpy as np

A = np.array([[3, 4], [1, 5], [2, 0]], dtype=float)
B = np.array([[2, 4], [1, 1]], dtype=float)

# 방법 1: 내적 (표준)
AB_standard = A @ B
print("방법 1 (표준):\n", AB_standard)

# 방법 2: 열 방법
m, n = A.shape
_, p = B.shape
AB_col = np.column_stack([A @ B[:, j] for j in range(p)])
print("방법 2 (열):\n", AB_col)

# 방법 3: 행 방법
AB_row = np.vstack([A[i, :] @ B for i in range(m)])
print("방법 3 (행):\n", AB_row)

# 방법 4: 열×행 (랭크 1 합)
AB_outer = sum(np.outer(A[:, k], B[k, :]) for k in range(n))
print("방법 4 (열×행):\n", AB_outer)

# 모두 같아야 함
assert np.allclose(AB_standard, AB_col)
assert np.allclose(AB_standard, AB_row)
assert np.allclose(AB_standard, AB_outer)
print("모든 방법 일치!")

10.2 Step 2 — 블록 곱셈 검증

import numpy as np

# 4×4 행렬을 2×2 블록으로 분할
A = np.random.randint(1, 5, (4, 4)).astype(float)
B = np.random.randint(1, 5, (4, 4)).astype(float)

# 블록 분할
A11, A12 = A[:2, :2], A[:2, 2:]
A21, A22 = A[2:, :2], A[2:, 2:]
B11, B12 = B[:2, :2], B[:2, 2:]
B21, B22 = B[2:, :2], B[2:, 2:]

# 블록 곱셈 결과
AB_block = np.block([
    [A11@B11 + A12@B21, A11@B12 + A12@B22],
    [A21@B11 + A22@B21, A21@B12 + A22@B22]
])

AB_direct = A @ B

print("블록 곱셈 == 직접 곱셈?", np.allclose(AB_block, AB_direct))

# 인접 행렬 경로 계산
Adj = np.array([[1, 1], [1, 0]], dtype=float)
print("1단계 경로 수 (A):\n", Adj)
print("2단계 경로 수 (A^2):\n", Adj @ Adj)
print("3단계 경로 수 (A^3):\n", Adj @ Adj @ Adj)

11 핵심 요약

  1. 모양 조건: \((m \times n)(n \times p) = (m \times p)\)\(A\) 의 열 수 = \(B\) 의 행 수.
  2. 네 가지 관점: 내적 / 열 / 행 / 열×행(외적 합) — 모두 동일한 결과, 다른 통찰.
  3. 성립하는 법칙: 덧셈 교환·분배·결합, 곱셈 분배·결합.
  4. 깨지는 법칙: \(AB \neq BA\) — 변환 순서가 결과를 바꾼다.
  5. 블록 곱셈: 열-행 분할이 맞으면 블록끼리 곱하면 된다.
  6. 슈어 여인수: 블록 소거의 결과 \(S = D - CA^{-1}B\) — 이후 단계의 피벗 블록.

Subscribe

Enjoy this blog? Get notified of new posts by email: