[Python Numpy] Matrix에 대해 고윳값, 고유벡터 추출

개념

고유벡터와 고윳값이 물어보는 것

  • “벡터 x에 어떠한 선형변환 A를 했을 때, 그 크기만 변하고 원래 벡터와 평행한 벡터 x는 무엇인가요?”
  • “그렇다면, 그 크기는 얼마만큼 변했나요?”

벡터에 행렬 연산을 취해준다는 것

  • 행렬은 선형 변환 연산이다.
  • 행렬은 벡터를 변환시켜 다른 벡터를 출력한다.

Another

  • 위 그림과 같이 핼렬을 이용해 벡터를 변환시키면, 변환 후의 벡터는 변환 전의 벡터와 비교했을 때, 크기도 방향도 모두 변할 수 있다.

고윳값과 고유벡터의 의미

  • 특정한 벡터와 행렬은 선형변환을 취해주었을 때, 크기만 바뀌고 방향은 바뀌지 않을 수 있다.
  • 입력 벡터 $\overrightarrow{x}$를 $A$로 선형변환 시킨 결과($A\overrightarrow{x}$)가 상수배라는 것
\[\overrightarrow{x}=\lambda \overrightarrow{x}\]

스크린샷 2021-08-16 11 45 05

  • 어떤 벡터와 행렬은 변환시키면 평행하지만 크기만 바뀐 벡터를 출력한다.

고윳값, 고유벡터의 정의

  • 행렬 A를 선형변환으로 봤을 때, 선형변환 A에 의한 변환 결과가 자기 자신의 상수배가 되는 0이 아닌 벡터를고유벡터(eigenvector)라 하고 이 상수배 값을 고유값(eigenvalue)이라 한다.
  • 임의의 $n$×$n$ 행렬 $A$에 대하여, 0이 아닌 솔루션 벡터 $\overrightarrow{x}$가 존재한다면 숫자 $\lambda$는 행렬 $A$의 고윳값이다.
  • 이 때, 솔루션 벡터 $\overrightarrow{x}$는 고윳값 $\lambda$에 대응하는 고유벡터이다.
  • 출처 : 공돌이의 수학정리노트

Numpy 이용 고윳값, 고유벡터 추출

\[A = \begin{bmatrix} 4 & 2 \\ 2 & 4 \end{bmatrix}\]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import numpy as np

eig = np.linalg.eig
matrix = np.matrix
testmatrix = matrix([[4, 2], [2, 4]]) # 매트릭스 생성

print(eig(testmatrix)) #Eigenvalue와 Eigenvector
'''
(array([6., 2.]), matrix([[ 0.70710678, -0.70710678],
                          [ 0.70710678,  0.70710678]]))
'''

value = eig(testmatrix)[0] #Eigenvalue
vector = eig(testmatrix)[1] #Eigenvector

print('Eigenvalue :', value)
print('Eigenvector :', vector)
'''
Eigenvalue : [6. 2.]
Eigenvector : [[ 0.70710678 -0.70710678]
               [ 0.70710678  0.70710678]]
'''
  • 선형변환 매트릭스에 대한 고윳값는 6과 2이다.
  • 바꿔 말하면, 선형 변환을 했을 때 그 크기는 변하고 방향이 변하지 않는 벡터가 있다고 할 때, 그 벡터의 크기는 각각 2배와 6배가 된다는 의미이다.

선형대수학에서 중요한 이유

  • 딱히 이것 때문이다라고 결론지을 수는 없지만 고유값, 고유벡터 그 자체의 활용보다는 SVD(특이값분해), Pseudo-Inverse, 선형연립방정식의 풀이, PCA(주성분분석) 등의 주요 응용이 eigenvalue, eigenvector를 그 밑바탕에 깔고 있기 때문이다.
0%