Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python NumPy로 촐레스키 분해(Cholesky Decomposition) 계산하기

정방 행렬의 촐레스키 분해(Cholesky Decomposition)를 계산하려면 NumPy의 numpy.linalg.cholesky() 메서드를 사용합니다. 이 메서드는 정방 행렬 a에 대해 L * L.H 형태의 촐레스키 분해를 반환합니다. 여기서 L은 하삼각 행렬(lower-triangular)이며, .H는 켤레 전치(conjugate transpose) 연산자를 의미합니다.

입력 행렬 a는 반드시 에르미트(Hermitian) 행렬이면서 양의 정부호(positive-definite)여야 합니다. 다만 이 메서드는 a가 실제로 에르미트 행렬인지 별도로 검사하지 않으며, 오직 하삼각 요소와 대각선 요소만 사용해 계산한 뒤 하삼각 인자 L만 반환합니다.

매개변수 a는 에르미트 행렬(모든 요소가 실수일 경우에는 대칭 행렬)이면서 양의 정부호인 입력 행렬입니다. 메서드는 a의 상삼각 또는 하삼각 촐레스키 인자를 반환하며, 입력이 행렬 객체(matrix object)라면 역시 행렬 객체 형태로 결과를 돌려줍니다.

단계별 진행 과정

1단계: 필요한 라이브러리 임포트

먼저 필요한 라이브러리를 가져옵니다.

import numpy as np

2단계: 2차원 배열 생성

numpy.array() 메서드를 사용해 2차원 NumPy 배열을 생성합니다.

arr = np.array([[1,-2j],[2j,5]])

3단계: 배열 정보 확인

생성된 배열과 차원, 데이터 타입, 형상(shape)을 차례로 출력해 확인합니다.

print("Our Array...\n",arr)

print("\nDimensions of our Array...\n",arr.ndim)

print("\nDatatype of our Array object...\n",arr.dtype)

print("\nShape of our Array object...\n",arr.shape)

4단계: 촐레스키 분해 수행

numpy.linalg.cholesky() 메서드를 호출해 촐레스키 분해 결과를 얻습니다.

print("\nCholesky decomposition in Linear Algebra...\n",np.linalg.cholesky(arr))

전체 예제 코드

import numpy as np

# numpy.array() 메서드로 2차원 배열 생성
arr = np.array([[1,-2j],[2j,5]])

# 배열 출력
print("Our Array...\n",arr)

# 차원 확인
print("\nDimensions of our Array...\n",arr.ndim)

# 데이터 타입 확인
print("\nDatatype of our Array object...\n",arr.dtype)

# 형상(shape) 확인
print("\nShape of our Array object...\n",arr.shape)

# numpy.linalg.cholesky() 메서드로 촐레스키 분해 수행
print("\nCholesky decomposition in Linear Algebra...\n",np.linalg.cholesky(arr))

실행 결과

Our Array...
[[ 1.+0.j -0.-2.j]
[ 0.+2.j 5.+0.j]]

Dimensions of our Array...
2

Datatype of our Array object...
complex128

Shape of our Array object...
(2, 2)

Cholesky decomposition in Linear Algebra...
[[1.+0.j 0.+0.j]
[0.+2.j 1.+0.j]]

실행 결과를 보면 복소수 요소를 포함한 2×2 에르미트 행렬이 성공적으로 촐레스키 분해되어, 하삼각 행렬 L이 [[1.+0.j 0.+0.j], [0.+2.j 1.+0.j]] 형태로 반환된 것을 확인할 수 있습니다.