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

Python NumPy로 행렬 스택의 행렬식 계산하기

개요

선형 대수학에서 여러 개의 행렬로 구성된 스택(stack)의 행렬식을 한 번에 계산하려면 파이썬 NumPy의 np.linalg.det() 함수를 사용하면 됩니다. 첫 번째 매개변수인 a는 행렬식을 계산할 입력 배열이며, 이 메서드는 입력 배열에 포함된 각 행렬의 행렬식을 배열 형태로 반환합니다.

예를 들어 3차원 배열(형상이 (3, 2, 2))이 주어지면, 함수는 세 개의 2×2 행렬 각각에 대한 행렬식을 계산하여 크기가 3인 결과 배열을 돌려줍니다.

단계별 진행 과정

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

import numpy as np

여러 개의 2×2 행렬을 포함하는 3차원 배열을 생성합니다.

arr = np.array([ [[1, 2], [3, 4]], [[1, 2], [2, 1]], [[1, 3], [3, 1]] ])

생성된 배열을 출력합니다.

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의 np.linalg.det() 함수를 호출합니다.

print("\nResult (determinant)...\n",np.linalg.det(arr))

전체 예제 코드

import numpy as np

# 배열 생성
arr = np.array([ [[1, 2], [3, 4]], [[1, 2], [2, 1]], [[1, 3], [3, 1]]])

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

# np.linalg.det()로 행렬 스택의 행렬식 계산
print("\nResult (determinant)...\n",np.linalg.det(arr))

실행 결과

Our Array...
[[[1 2]
[3 4]]

[[1 2]
[2 1]]

[[1 3]
[3 1]]]

Dimensions of our Array...
3

Datatype of our Array object...
int64

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

Result (determinant)...
[-2. -3. -8.]

결과 해석

출력된 결과 [-2. -3. -8.]는 입력 배열에 포함된 세 개의 2×2 행렬 각각에 대한 행렬식입니다. 즉, 첫 번째 행렬 [[1, 2], [3, 4]]의 행렬식은 -2, 두 번째 행렬 [[1, 2], [2, 1]]의 행렬식은 -3, 세 번째 행렬 [[1, 3], [3, 1]]의 행렬식은 -8로 계산되었습니다.

이처럼 np.linalg.det() 함수는 다차원 배열에 담긴 여러 행렬에 대해 반복문 없이도 벡터화된 방식으로 행렬식을 한꺼번에 계산해 줍니다. 참고로 행렬식 값이 0이 아니면 해당 행렬은 가역적(invertible)임을 의미합니다.