C.W.K.
Stream
Lesson 07 of 08 · published

고유값 & 고유벡터: 행렬의 심장박동

~12 min · eigenvalues, eigenvectors, intuition, blender

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

아이겐 던전

이건 선형대수의 보스전, 교과서가 가장 강하게 기대고 학습자가 가장 빠르게 튕겨 나가는 부분. Blender 접근 — 형식화 전에 보기 — 형식 버전은 이미 직관 가진 사람들이 디자인했으니까.

핸즈온 버전 (Blender 열기)

Blender 있으면 (무료) 이거 해:

  1. Plane 추가. 격자 보이게 몇 번 subdivide.
  2. S 그다음 X 눌러 X 축 따라 늘이기.
  3. 주목: X 축은 늘어나고, Y 축은 안 늘어남. 어떤 방향은 커지고; 다른 건 그대로.

방금 linear 변환 수행했음. X 방향이 고유벡터 (변환에 회전 없이 스케일만 받는 방향). 늘어난 양 (예: 2×) 이 그 고유벡터의 고유값.

정의, 얻은 것

정방 행렬 에 대해, 고유벡터 와 고유값 만족:

한국어로: "변환 를 벡터 에 적용 = 만큼 스케일 — 방향 안 바꿈." 고유벡터 = 아래 orientation 고정 방향; 고유값이 얼마나 늘어나는지 (또는 줄어들거나, 음수면 flip) 말해줌.

왜 심장박동인가

대부분 변환은 messy — 한 번에 회전+스케일+shear. 고유벡터 = 그 messy 가 그저 스케일링 으로 collapse 하는 특수 방향. 행렬의 고유벡터 찾기 = skeleton 찾기 — 행렬이 가장 깨끗하게 작업하는 축.

이 skeleton 어디나 등장:

  • PCA = covariance 행렬의 고유벡터 사용해 데이터의 최대 분산 방향 찾기.
  • PageRank = 웹-링크 행렬의 dominant 고유벡터 찾아 중요도 점수.
  • 양자역학 = 상태를 연산자의 고유벡터로 묘사; 관측값 = 고유값.
  • 스펙트럴 클러스터링 = 그래프 라플라시안의 고유벡터로 클러스터 찾기.
고유벡터는 변환이 존중하는 방향. 찾으면 변환의 깊은 구조 이해. np.linalg.eig 로 계산 — 2×2 넘으면 손으로 절대 X.

솔직한 피파 take

고유값은 아빠 챕터 네 번 읽고 click 했어. 마침내 박힌 거: 행렬을 동사 (변환), 고유벡터를 그 동사가 가장 깨끗하게 작용하는 명사로 봐. 대부분 변환에 "선호 방향" 몇 개 — 그게 고유벡터. 행렬이 안 비틀고, 그냥 스케일. 마법은 그게 다.

Code

Eigen, NumPy·python
import numpy as np

# 대칭 2x2 — 실수 고유값 보장, 수직 고유벡터
A = np.array([[2, 1],
              [1, 2]])

eigenvalues, eigenvectors = np.linalg.eig(A)
print("고유값:", eigenvalues)              # [3. 1.]
print("고유벡터:\n", eigenvectors)
# 각 열이 고유벡터. lambda=3 의 고유벡터 = 대략 (0.707, 0.707) — (1, 1) 방향.
# lambda=1 은 (-0.707, 0.707) — (-1, 1) 방향. 변환이 (1,1) 방향 벡터를 3배,
# (-1,1) 방향 벡터는 그대로.

# 검증: A @ v = lambda * v
v0 = eigenvectors[:, 0]
print(np.allclose(A @ v0, eigenvalues[0] * v0))  # True
MLX flavor — Apple Silicon eigh (대칭만)·python
import mlx.core as mx

# MLX flavor — 현재 API 는 `linalg.eigh` (대칭 / Hermitian) 만 제공.
# 일반 `linalg.eig` 는 아직 X. 근데 대칭이면 충분 — PCA / 스펙트럴
# 메서드는 늘 대칭 행렬 (covariance, Gram, Laplacian) 다룸.
A = mx.array([[2.0, 1.0], [1.0, 2.0]])

eigenvalues, eigenvectors = mx.linalg.eigh(A, stream=mx.cpu)
print("고유값:", eigenvalues.tolist())              # [1.0, 3.0]
print("고유벡터:\n", eigenvectors.tolist())
# eigh 는 고유값을 오름차순으로 반환 — NumPy eig 와 열 순서 반대.
# 수학은 같음; 열 순서만 다름.

v_top = eigenvectors[:, -1]                          # 마지막 열 = 최대 고유값
print(mx.allclose(A @ v_top, eigenvalues[-1] * v_top).item())  # True

External links

Exercise

행렬 [[3, 0], [0, 2]] (순수 스케일링) 의 고유값과 고유벡터 계산. 실행 전 답 예측. 왜 그게 명백한가?
Hint
행렬이 x 를 3배, y 를 2배 스케일 — 고유벡터가 정확히 x, y 축, 고유값 3, 2. 순수 대각 행렬은 대각에 고유값 입고 있음.

Progress

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

댓글 2

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

    import numpy as np

    M = np.array([[3., 0.], [0., 2.]]) vals, vecs = np.linalg.eig(M)

    print('eigenvalues =', vals) print('eigenvectors =') print(vecs)

    실행 결과: eigenvalues = [3. 2.] eigenvectors = [[1. 0.] [0. 1.]]

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

      예측이 정확해요. 이 행렬은 x축을 3배, y축을 2배로 늘리는 순수 대각 스케일링이라서, 표준기저가 그대로 고유벡터로 나오는 게 핵심이에요. NumPy 결과에서 고유벡터가 열(column)로 들어 있다는 점까지 잘 확인했어요.