선형 대수에서 행렬의 조건수(condition number)를 계산하려면 Python의 numpy.linalg.cond() 메서드를 사용하면 됩니다. 이 메서드는 매개변수 p 값에 따라 서로 다른 일곱 가지 노름(norm) 중 하나를 선택해 조건수를 반환할 수 있으며, 결과는 무한대(infinite)가 나올 수도 있습니다.
행렬 x의 조건수는 x의 노름 × x의 역행렬의 노름으로 정의됩니다. 여기서 사용되는 노름은 일반적인 L2-노름일 수도 있고, 다른 여러 종류의 행렬 노름일 수도 있습니다.
첫 번째 매개변수 x는 조건수를 구하고자 하는 행렬이며, 두 번째 매개변수 p는 조건수 계산에 사용할 노름의 차수(order)입니다. 이번 예제에서는 p를 2로 설정하여 2-노름을 기준으로 조건수를 계산해 보겠습니다.
단계별 진행 과정
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)배열의 차원(dimension)을 확인합니다.
print("\nDimensions of our Array...\n",arr.ndim)배열의 데이터 타입(datatype)을 확인합니다.
print("\nDatatype of our Array object...\n",arr.dtype)배열의 형태(shape)를 확인합니다.
print("\nShape of our Array object...\n",arr.shape)4. 조건수 계산
numpy.linalg.cond() 메서드를 사용해 행렬의 조건수를 계산합니다. 두 번째 인자로 2를 전달하여 2-노름 기준의 결과를 얻습니다.
print("\nResult...\n",LA.cond(arr, 2))전체 예제 코드
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)
# 형태 확인
print("\nShape of our Array object...\n",arr.shape)
# numpy.linalg.cond() 메서드로 조건수 계산 (2-노름 사용)
print("\nResult...\n",LA.cond(arr, 2))실행 결과
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... 3.7320508075688776
실행 결과를 보면 3×3 크기의 int64 타입 배열에 대해 2-노름 기준 조건수 약 3.732가 계산된 것을 확인할 수 있습니다. 조건수가 작을수록 행렬이 수치적으로 안정적이라는 의미이며, 이 값은 선형 시스템의 해를 구할 때 오차 민감도를 판단하는 중요한 지표로 활용됩니다.