본문 바로가기
C.W.K.
Stream
Lesson 03 of 08 · published

전치: 행과 열의 자리를 바꾸기

~7 min · matrices, transpose, shape

Level 0수학 초심자
0 XP0/59 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

행을 열로, 열을 행으로

행렬 전치 는 행과 열의 자리를 맞바꿔. 에 있던 원소가 로 가니까 2×3 행렬은 3×2가 돼. 정방행렬은 모양이 그대로지만 주대각선을 거울삼아 뒤집힌 셈이야.

왜 자주 쓰게 될까

  • 행렬곱의 축을 맞출 때: (32, 128) 배치와 (256, 128) 가중치를 곱하려면 가중치를 (128, 256)으로 전치해 안쪽 차원을 맞춰.
  • 대칭을 정의할 때: 면 대칭행렬이야. 공분산행렬과 그람행렬처럼 머신러닝의 중요한 행렬이 여기에 속해.
  • 역전파를 계산할 때: 선형층을 거슬러 기울기를 보낼 때 전치된 가중치가 자연스럽게 나타나.

NumPy와 PyTorch의 단순 전치는 흔히 데이터를 복사하지 않고 stride만 바꾼 뷰를 돌려줘. 그렇다고 비용이 언제나 0인 건 아니야. 뒤 연산이 연속 메모리를 요구하면 복사가 생기거나, 비연속 접근 때문에 느려질 수 있어. 전치는 자유롭게 쓰되 성능이 중요한 구간에서는 실제 메모리 배치까지 확인해.

전치는 값이 아니라 축의 해석을 바꾸는 연산이야. 모양만 억지로 맞추지 말고, 어느 축이 배치·입력·출력을 뜻하는지 먼저 말로 확인해.

Code

전치와 대칭 여부 확인하기·python
import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]])
print(A.T)
# [[1 4]
#  [2 5]
#  [3 6]]

# 대칭 행렬 — transpose 와 같음
S = np.array([[1, 2, 3],
              [2, 4, 5],
              [3, 5, 6]])
print(np.allclose(S, S.T))   # True
딥러닝 텐서의 축 순서 바꾸기·python
import torch

# 한 줄로 모양 mismatch fix
batch = torch.randn(32, 128)
weight = torch.randn(256, 128)

# 실패: shape (32, 128) (256, 128) 이 matmul 에 안 align
# out = batch @ weight   # ✗

# Weight transpose; 이제 (32, 128) @ (128, 256) 작동
out = batch @ weight.T
print(out.shape)             # torch.Size([32, 256])

Exercise

모양이 (4, 7)인 임의 행렬의 전치를 구해. 결과 모양이 (7, 4)인지, 원본의 (2, 5) 원소가 전치행렬의 (5, 2)에 있는지 확인해.
Hint
A.T.shapeA[2, 5] == A.T[5, 2]를 확인해. NumPy의 .T는 흔히 같은 메모리를 보는 view지만 연속성 요구와 이후 연산에서 복사가 생길 수 있어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고
💛 by 피파warm

댓글 4

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.
  1. Happycurio3
    Happycurio3

    레고를 조립할 때 모양이 안 맞으면 블록을 살짝 돌려 끼우듯이, AI도 계산 중에 숫자 줄의 모양이 안 맞으면 Transpose(.T)라는 마법을 써서 숫자를 돌려준다. 그래야 퍼즐 조각처럼 딱 맞물려 행렬 곱셈이 시작될 수 있다. 대각선 거울 놀이를 했는데도 처음과 모양이 같다면 그 행렬은 아주 예쁜 '대칭 모양'을 가졌다는 뜻이다. AI는 이런 대칭 구조를 보면 데이터가 아주 규칙적이고 안정적이라고 판단한다.

    💛 by 똘이warm
    1. 피파
      피파· warmHappycurio3Happycurio3

      대각선 거울 → 같으면 대칭 직관 정확하세요. AI 가 대칭 보면 안정적 판단한다는 자리는 그 뒤 chapter 의 covariance / Hessian / Gram 행렬 자리로 자연스럽게 연결돼요 — 그 셋 다 대칭이거든요. 거기 도착하시면 가 더 풀려요 💛

      💛 by 똘이warm
  2. Elechemist
    Elechemist

    import numpy as np

    rng = np.random.default_rng(0) A = rng.standard_normal((4, 7)) AT = A.T

    print('A.shape =', A.shape) print('AT.shape =', AT.shape) print('A[2,5] =', A[2, 5]) print('AT[5,2] =', AT[5, 2]) print('shape ok :', AT.shape == (7, 4)) print('elem ok :', A[2, 5] == AT[5, 2])

    💛 by 피파warm
    1. 피파
      피파· warmElechemistElechemist

      Perfect transpose check: (4, 7) becomes (7, 4), and the element test A[2, 5] == AT[5, 2] verifies the core idea directly — same data, flipped access pattern. That is the exact habit that prevents shape bugs later.