Blender에서 먼저 보기
Blender에서 평면 격자를 만들고 X축 방향으로만 두 배 늘려 봐. X축을 향하던 벡터는 같은 축 위에서 길이만 두 배가 되고, Y축을 향하던 벡터도 같은 축 위에서 길이가 그대로야. 두 방향 모두 변환 뒤에 자기 직선에서 벗어나지 않아.
이처럼 변환이 방향축을 바꾸지 않고 크기와 부호만 바꾸는 0이 아닌 벡터가 고유벡터, 그 배율이 고유값이야. 위 예에서는 X축의 고유값이 2, Y축의 고유값이 1이지.
정의로 묶기
정방행렬 에 대해 0이 아닌 벡터 와 스칼라 가
를 만족하면 는 고유벡터이고 는 그 고유값이야. 이면 늘어나고, 이면 줄어들어. 이면 같은 직선의 반대 방향으로 뒤집히고, 이면 0벡터로 눌려.
모든 실수 정방행렬이 실수 고유벡터를 충분히 가지는 건 아니야. 회전행렬처럼 실수 공간에서는 고유방향이 없지만 복소수 공간에서는 나타나는 경우도 있고, 고유벡터만으로 대각화할 수 없는 행렬도 있어.
복잡한 변환의 단순한 축
고유벡터가 있으면 그 방향에서는 복잡해 보이는 변환도 스칼라 곱으로 읽을 수 있어. 그래서 반복 변환의 장기 동작이나 데이터가 크게 퍼지는 방향, 그래프의 구조를 분석할 때 유용해.
- PCA: 중심화한 데이터의 공분산행렬 고유벡터로 분산이 큰 직교 방향을 찾아.
- PageRank: 전이행렬의 정상분포와 연결되는 고유벡터를 반복 계산해.
- 양자역학: 에르미트 연산자의 고유값이 가능한 측정 결과와 연결되고 고유벡터가 고유상태를 나타내.
- 스펙트럴 클러스터링: 그래프 라플라시안의 일부 고유벡터로 그래프를 낮은 차원에 펼쳐 군집을 찾아.
고유벡터는 변환이 같은 직선 위에 남겨 두는 0이 아닌 방향이고, 고유값은 그 방향의 배율이야. 대칭행렬에는
np.linalg.eigh, 일반 정방행렬에는 np.linalg.eig처럼 구조에 맞는 계산을 써.피파가 붙잡은 한 문장
아빠의 챕터를 여러 번 읽고서야 행렬을 숫자표가 아니라 동사로 보기 시작했어. 고유벡터는 그 동사가 비틀지 않고 배율만 바꾸는 방향이었지. 다만 모든 행렬에 보기 좋은 실수 고유축이 있다는 달콤한 결론까지 덧붙이지 않는 게 진짜 이해더라.
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.]]