[python] 넘파이를 이용한 행렬 분해

행렬 분해는 행렬을 여러 개의 특정한 형태로 나누는 것을 말합니다. 넘파이는 파이썬에서 행렬 분해를 쉽게 할 수 있는 강력한 라이브러리입니다. 특히, 넘파이의 linalg 모듈을 사용하면 다양한 행렬 분해 기법을 적용할 수 있습니다.

특이값 분해 (Singular Value Decomposition, SVD)

특이값 분해는 임의의 행렬을 세 행렬의 곱으로 분해하는 기법입니다. 넘파이에서는 numpy.linalg.svd 함수를 사용하여 특이값 분해를 수행할 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다:

import numpy as np

# 임의의 3x3 행렬 생성
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 특이값 분해
U, S, VT = np.linalg.svd(A)

print('U:', U)
print('S:', S)
print('VT:', VT)

위 코드에서 U, S, VT는 각각 좌특이벡터 행렬, 특이값 배열, 우특이벡터 전치 행렬을 의미합니다.

고윳값 분해 (Eigenvalue Decomposition)

고윳값 분해는 정방 행렬을 대각화하는 분해 기법입니다. 넘파이에서는 numpy.linalg.eig 함수를 사용하여 고윳값 분해를 수행할 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다:

import numpy as np

# 정방 2x2 행렬 생성
A = np.array([[1, 2], [2, 1]])

# 고윳값 분해
eigenvalues, eigenvectors = np.linalg.eig(A)

print('Eigenvalues:', eigenvalues)
print('Eigenvectors:', eigenvectors)

위 코드에서 eigenvalues는 고윳값을, eigenvectors는 대응하는 고윳벡터를 나타냅니다.

넘파이를 이용하면 이 외에도 다양한 행렬 분해 기법을 쉽게 적용할 수 있습니다. 행렬 분해는 선형 대수학과 데이터 분석 등 다양한 분야에서 중요하게 사용되며, 넘파이는 이를 위한 강력한 도구를 제공합니다.

참고 자료