선형 대수에서 행렬의 조건수(condition number)를 계산하려면 Python의 numpy.linalg.cond() 메서드를 사용할 수 있습니다. 이 메서드는 매개변수 p에 지정된 값에 따라 7가지 서로 다른 노름(norm) 중 하나를 사용하여 조건수를 반환하며, 경우에 따라 무한대(infinite) 값이 반환될 수도 있습니다.
행렬 x의 조건수는 x의 노름 × x의 역행렬의 노름으로 정의됩니다. 여기서 노름은 일반적인 L2 노름이거나 다른 여러 행렬 노름 중 하나일 수 있습니다.
- 첫 번째 매개변수(x): 조건수를 구하고자 하는 행렬
- 두 번째 매개변수(p): 조건수 계산에 사용할 노름의 차수(order)
이번 글에서는 두 번째 매개변수에 -np.inf(음의 무한대)를 지정하여 음의 무한대 노름 기준으로 조건수를 계산하는 방법을 알아보겠습니다.
단계별 진행 과정
1단계: 필요한 라이브러리 임포트
import numpy as np from numpy import linalg as LA
2단계: 배열 생성
arr = np.array([[ 1, 1, 0], [1, 0, 1], [1, 0, 0]])
3단계: 배열 출력 및 속성 확인
# 배열 출력
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)4단계: 음의 무한대 노름으로 조건수 계산
numpy.linalg.cond() 메서드에 두 번째 인자로 -np.inf를 전달하여 음의 무한대 노름 기준 조건수를 계산합니다.
print("\nResult...\n",LA.cond(arr, -np.inf))전체 예제 코드
import numpy as np
from numpy import linalg as LA
# 배열 생성
arr = np.array([[ 1, 1, 0],
[1, 0, 1],
[1, 0, 0]])
# 배열 출력
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)
# 음의 무한대 노름으로 조건수 계산
print("\nResult...\n",LA.cond(arr, -np.inf))실행 결과
Our Array... [[1 1 0] [1 0 1] [1 0 0]] Dimensions of our Array... 2 Datatype of our Array object... int64 Shape of our Array object... (3, 3) Result... 1.0
실행 결과를 보면 3×3 크기의 int64 타입 배열에 대해 음의 무한대 노름 기준으로 계산한 조건수가 1.0으로 반환되었습니다. 조건수가 1에 가깝다는 것은 해당 행렬이 수치적으로 매우 안정적(well-conditioned)이라는 의미입니다.