역행렬(Inverse Matrix) 이란 무엇인가? Numpy, TensorFlow, PyTorch 에서 계산 방법 알아보기

2024. 7. 22. 07:02·Machine Learning Math/Linear Algebra
반응형

역행렬이란?

$\mathbf{X}$에 대한 역행렬(inverse matrix)은 정사각 행렬 $\mathbf{X}$와 곱했을 때 단위 행렬(Identity Matrix)가 되는 행렬을 말한다. $\mathbf{X}$에 대한 역행렬은 $\mathbf{X}^{-1}$로 표현되며, 수식으로는 다음과 같이 표현된다.

 

$\mathbf{X} \cdot \mathbf{X}^{-1} = \mathbf{X}^{-1} \cdot \mathbf{X} = \mathbf{I}$

 

역행렬의 존재 여부 판단하기

역행렬은 원래의 행렬과 곱했을 때 단위 행렬이어야 하므로, 행과 열의 개수가 같은 정사각 행렬이어야 한다. 또 다른 조건은 행렬식(Determinant)이 0이 아닌 값이어야 한다. 

 

 

역행렬 계산 방식

1. 행렬식과 수반 행렬 사용

행렬식과 수반 행렬을 사용하면 구할 수 있다. 이 방식은 우리가 고등학교 때 많이 사용하던 방식이다.

$\mathbf{X}^{-1} = \frac{1}{\det(\mathbf{X})} \cdot \text{adj}(\mathbf{X})$

 

2. 가우스 조던 소거법 

가우스 조던 소거법을 통해 역행렬을 구할 수 있다. 자세한 내용은 아래 링크를 참고 하면 된다.

https://simcode.tistory.com/69

 

 

3. LU 분해(LU decomposition)

행렬을 하삼각 행렬(Lower triangular matrix)과 상삼각 행렬(Upper triangular matrix)로 분해한 후, 역행렬을 계산하는 방법이다.

 

 

Numpy, TensorFlow, PyTorch에서의 역행렬 계산

만약 Numpy, TensorFlow, PyTorch를 사용한다면, 위의 역행렬 계산 방식들을 직접 알 필요 없이 한 줄로 계산이 가능하다. 

 

Numpy 역행렬 계산

Numpy를 사용해 역행렬 계산을 하기 위해서는 np.linalg.inv() 함수를 사용하면 된다.

import numpy as np

# 행렬 정의
X = np.array([[1, 2], [3, 4]])

# 역행렬 계산
X_inv = np.linalg.inv(X)

print("Matrix X:\n", X)
print("Inverse of X:\n", X_inv)

# 확인 (X * X_inv 는 단위 행렬이어야 한다.)
identity = np.dot(X, X_inv)
print("X * X_inv:\n", identity)

 

위의 코드를 실행한 결과는 다음과 같다.

Matrix X:
 [[1 2]
 [3 4]]
Inverse of X:
 [[-2.   1. ]
 [ 1.5 -0.5]]
X * X_inv:
 [[1.0000000e+00 0.0000000e+00]
 [8.8817842e-16 1.0000000e+00]]

 

(2,1)의 값은 매우 작은 값이라 0이라 봐도 된다.

 

TensorFlow 역행렬 계산

TensorFlow를 사용해 역행렬 계산을 하기 위해서는 tf.linalg.inv() 함수를 사용하면 된다.

import tensorflow as tf

# 행렬 정의
X = tf.constant([[1.0, 2.0], [3.0, 4.0]])

# 역행렬 계산
X_inv = tf.linalg.inv(X)

print("Matrix X:\n", X)
print("Inverse of X:\n", X_inv)

# 확인 (X * X_inv 는 단위 행렬이어야 한다.)
identity = tf.matmul(X, X_inv)
print("X * X_inv:\n", identity)

 

위의 코드를 실행한 결과는 다음과 같다.

 

Matrix X:
 tf.Tensor(
[[1. 2.]
 [3. 4.]], shape=(2, 2), dtype=float32)
Inverse of X:
 tf.Tensor(
[[-2.0000002   1.0000001 ]
 [ 1.5000001  -0.50000006]], shape=(2, 2), dtype=float32)
X * X_inv:
 tf.Tensor(
[[ 1.0000000e+00  0.0000000e+00]
 [-4.7683716e-07  1.0000002e+00]], shape=(2, 2), dtype=float32)

 

PyTorch 역행렬 계산

PyTorch를 사용해 역행렬 계산을 하기 위해서는 torch.inverse() 함수를 사용하면 된다.

import torch

# 행렬 정의
X = torch.tensor([[1.0, 2.0], [3.0, 4.0]])

# 역행렬 계산
X_inv = torch.inverse(X)

print("Matrix X:\n", X)
print("Inverse of X:\n", X_inv)

# 확인 (X * X_inv 는 단위 행렬이어야 한다.
identity = torch.matmul(X, X_inv)
print("X * X_inv:\n", identity)

 

위의 코드를 실행한 결과는 다음과 같다.

Matrix X:
 tensor([[1., 2.],
        [3., 4.]])
Inverse of X:
 tensor([[-2.0000,  1.0000],
        [ 1.5000, -0.5000]])
X * X_inv:
 tensor([[1., 0.],
        [0., 1.]])

 

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Machine Learning Math > Linear Algebra' 카테고리의 다른 글

직교 행렬(Orthogonal Matrix)이란 무엇인가?  (0) 2024.07.31
대각 행렬(Diagonal Matrix) 한 번에 정리하기  (0) 2024.07.23
가우스 조던 소거법(Gauss-Jordan Elimination) 알아보기  (0) 2024.07.21
대칭 행렬(Symmetric Matrix)와 단위 행렬(Identity Matrix) 한 번에 정리하기: Numpy, TensorFlow, PyTorch 사용해 단위 행렬 만들기  (0) 2024.07.20
Frobenius Norm 이란 무엇인가? Numpy, TensorFlow, PyTorch에서의 Frobenius Norm 계산법 알아보기  (0) 2024.07.19


'Machine Learning Math/Linear Algebra' 카테고리의 다른 글
  • 직교 행렬(Orthogonal Matrix)이란 무엇인가?
  • 대각 행렬(Diagonal Matrix) 한 번에 정리하기
  • 가우스 조던 소거법(Gauss-Jordan Elimination) 알아보기
  • 대칭 행렬(Symmetric Matrix)와 단위 행렬(Identity Matrix) 한 번에 정리하기: Numpy, TensorFlow, PyTorch 사용해 단위 행렬 만들기
심플코드
심플코드
프로그래밍을 어렵지 않게 풀어서 설명하는 기술 블로그
    반응형
  • 심플코드
    심플코드
    심플코드
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • 안드로이드를 위한 Coroutines (2)
      • Unit Testing (19)
      • GitHub Actions (0)
      • 공식 문서 번역 (35)
        • Coroutines 공식 문서 (35)
      • 알고리즘 (7)
        • Kotlin 자료구조 (0)
        • 알고리즘 (7)
        • Kotlin으로 구현하는 자료구조 (0)
      • 코딩 테스트 (0)
      • Deep Learning (0)
      • Machine Learning Math (17)
        • Linear Algebra (17)
      • ML (0)
      • Docker (15)
      • Kubernetes (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 코틀린 코루틴의 정석 책 출간 소식
  • 인기 글

  • 태그

    Machine Learning
    Coroutines Context
    mockito
    Coroutines
    컨테이너
    Coroutines Channel
    코루틴 Flow
    Coroutines Flow
    코루틴 채널
    TensorFlow
    junit
    pytorch
    unit test
    Kotlin
    coroutine
    도커
    unit testing
    numpy
    Docker
    코루틴
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
심플코드
역행렬(Inverse Matrix) 이란 무엇인가? Numpy, TensorFlow, PyTorch 에서 계산 방법 알아보기
상단으로

티스토리툴바