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

Python NumPy matrix_power()로 정사각형 행렬의 n제곱 쉽게 구하기

선형 대수학에서 정사각형 행렬을 n 거듭제곱으로 올려야 할 때가 종종 있습니다. Python에서는 numpy.linalg.matrix_power() 함수를 사용하면 이 작업을 간단하게 처리할 수 있습니다.

matrix_power() 함수의 동작 방식

이 함수는 지수 n의 값에 따라 다음과 같이 동작합니다.

  • n이 양의 정수인 경우: 반복적인 행렬 제곱(squaring)과 행렬 곱셈을 통해 거듭제곱을 계산합니다.
  • n == 0인 경우: 입력 행렬 M과 동일한 크기의 단위 행렬(identity matrix)을 반환합니다.
  • n이 음수인 경우: 먼저 역행렬을 구한 뒤, 그 결과를 abs(n)만큼 거듭제곱합니다.

반환되는 배열은 입력 행렬 M과 같은 shape와 타입을 가집니다. 지수가 0 또는 양수라면 요소의 자료형도 M과 동일하지만, 지수가 음수일 경우 요소는 부동 소수점(floating-point) 타입으로 변환됩니다.

매개변수 설명

  • 첫 번째 매개변수 a: 거듭제곱을 적용할 정사각형 행렬입니다.
  • 두 번째 매개변수 n: 지수(exponent)로, 양수·음수·0을 포함한 임의의 정수 또는 long 정수를 사용할 수 있습니다.

구현 단계

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

import numpy as np
from numpy.linalg import matrix_power

허수 단위(imaginary unit)에 해당하는 행렬과 동일한 2차원 배열을 생성합니다.

arr = np.array([[0, 1], [-1, 0]])

배열을 화면에 출력해 확인합니다.

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

배열의 차원 수(ndim)를 확인합니다.

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

배열 객체의 자료형(dtype)을 확인합니다.

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

배열의 형상(shape)을 확인합니다.

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

이제 numpy.linalg.matrix_power()를 사용해 정사각형 행렬을 n 거듭제곱으로 올립니다. 여기서는 지수를 0으로 지정했으므로, 입력 행렬과 같은 크기의 단위 행렬이 반환됩니다.

print("\nResult...\n",matrix_power(arr, 0))

전체 예제 코드

import numpy as np
from numpy.linalg import matrix_power

# 허수 단위에 해당하는 행렬과 동일한 2D 배열 생성
arr = np.array([[0, 1], [-1, 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.matrix_power()로 정사각형 행렬의 n제곱 계산
print("\nResult...\n",matrix_power(arr, 0))

실행 결과

Our Array...
[[ 0 1]
[-1 0]]

Dimensions of our Array...
2

Datatype of our Array object...
int64

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

Result...
[[1 0]
[0 1]]

실행 결과를 보면 지수가 0이었기 때문에 [[1, 0], [0, 1]] 형태의 단위 행렬이 반환된 것을 확인할 수 있습니다. 이처럼 matrix_power() 하나만으로 양수·음수·0 지수에 대한 행렬 거듭제곱을 모두 손쉽게 처리할 수 있습니다.