반응형
파이썬 넘파이 단위행렬, 역행렬 함수
Numpy 라이브러리에서 단위행렬을 손쉽게 설정할 수 있는 np.eye()와
역행렬을 구하여 반환받을 수 있는 LA.inv() 혹은 np.linalg.inv()에 대해서 다루어보겠습니다.
단위행렬 함수 : np.eye
기본적으로 np.eye(n) 형태로 n * n 사이즈(n은 정수)의 단위행렬을 생성할 수 있습니다.
import numpy as np
np.eye(4)
'''
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])'''
np.eye 내에 dtype 인자를 설정하여 배열 내 값들의 자료형을 지정할 수 있습니다.
np.eye(5, dtype = int)
'''
array([[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1]])'''
k인자를 설정하면 양수로 지정 시에는 1의 위치가 해당 칸만큼 오른쪽으로 이동하며,
음수로 지정 시에는 같은 원리로 왼쪽으로 1의 위치들이 이동하여 배열이 설정됩니다.
np.eye(4, k = 1)
'''
array([[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.],
[0., 0., 0., 0.]])'''
np.eye(4, k = -1)
'''
array([[0., 0., 0., 0.],
[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.]])'''
반응형
역행렬 함수 : LA.inv 또는 np.linalg.inv
정방행렬에 대하여 역행렬을 반환해주는 함수도 넘파이에서 지원하고 있습니다.
해당 함수는 import의 형태에 따라 LA.inv 또는 np.linalg.inv로 사용됩니다.
import numpy.linalg as LA
import numpy as np
a = np.array([[1, 2],
[3, 4]])
LA.inv(a) # 또는 np.linalg.inv(a)
'''
array([[-2. , 1. ],
[ 1.5, -0.5]])'''
b = np.array([[1, 2, 3],
[1, 3, 6],
[2, 5, 10]])
LA.inv(b) # 또는 np.linalg.inv(b)
'''
array([[ 0., -5., 3.],
[ 2., 4., -3.],
[-1., -1., 1.]])'''
여기서 해당 배열이 2차원 이상일 경우에는 마지막 두 axis를 기준으로
각각의 부분 행렬에 대하여 구한 역행렬들을 모아서 반환시켜줍니다.
c = np.array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
LA.inv(c)
'''
array([[[-2. , 1. ],
[ 1.5, -0.5]],
[[-4. , 3. ],
[ 3.5, -2.5]]])'''
다만, singular matrix(역행렬이 존재하지 않는 행렬)가 포함되거나
마지막 두 axis가 정방행렬이 아니면 오류가 발생되므로 사용에 유의가 필요합니다.
# 역행렬이 존재하지 않는 경우
o = np.array([[0, 0],
[0, 0]])
LA.inv(o) # LinAlgError: Singular matrix
# 정사각행렬이 아닌 경우
d = np.array([[1, 2, 3],
[4, 5, 6]])
LA.inv(d) # LinAlgError: Last 2 dimensions of the array must be square
'Python > Numpy' 카테고리의 다른 글
[Numpy] 파이썬 삼각함수(sin, cos, tan)와 역삼각함수(arcsin, arccos, arctan) 메소드 정리 (0) | 2022.06.07 |
---|---|
[Numpy] np.random.seed() 의미, random.seed()와 비교 (0) | 2022.05.02 |
[Numpy] 넘파이 자료형 종류 지정, 확인 및 변경 방법(dtype, astype) (0) | 2022.04.20 |