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

Python NumPy로 복소 에르미트 행렬 또는 실수 대칭 행렬의 고유값 계산하기

복소 에르미트(complex Hermitian) 행렬이나 실수 대칭(real symmetric) 행렬의 고유값(eigenvalue)을 계산하려면 numpy.eigvalsh() 메서드를 사용합니다. 이 메서드는 고유값을 오름차순으로 정렬하여 반환하며, 중복된 고유값은 그 중복도(multiplicity)에 따라 반복해서 나타냅니다.

첫 번째 매개변수 a는 고유값을 계산할 복소수 또는 실수 값의 행렬입니다. 두 번째 매개변수 UPLO는 행렬 a의 하삼각 부분('L', 기본값)을 사용할지 상삼각 부분('U')을 사용할지 지정합니다. 이 값과 무관하게 계산 시에는 에르미트 행렬의 성질을 유지하기 위해 대각선 요소의 실수부만 사용되며, 따라서 대각선 요소의 허수부는 항상 0으로 간주됩니다.

계산 단계

먼저 필요한 라이브러리를 임포트합니다.

import numpy as np
from numpy import linalg as LA

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

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

배열을 출력합니다.

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.eigvalsh() 메서드를 호출합니다.

print("\nResult...\n",LA.eigvalsh(arr))

전체 예제 코드

from numpy import linalg as LA
import numpy as np

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

# 배열 출력
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)

# eigvalsh() 메서드로 고유값 계산
print("\nResult...\n",LA.eigvalsh(arr))

실행 결과

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

Dimensions of our Array...
2

Datatype of our Array object...
complex128

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

Result...
[1. 6.]

실행 결과를 보면 2x2 크기의 복소수 행렬에 대해 두 개의 고유값 [1. 6.]이 오름차순으로 반환된 것을 확인할 수 있습니다. 참고로 일반적인 비대칭/비에르미트 행렬에는 eigvals()를 사용하고, 대칭성이나 에르미트 성질이 보장되는 행렬에는 eigvalsh()를 사용하는 것이 더 빠르고 수치적으로 안정적입니다.