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

2024. 7. 22. 07:02·Machine Learning Math/Linear Algebra
목차
  1. 역행렬이란?
  2. 역행렬의 존재 여부 판단하기
  3. 역행렬 계산 방식
  4. 1. 행렬식과 수반 행렬 사용
  5. 2. 가우스 조던 소거법 
  6. 3. LU 분해(LU decomposition)
  7. Numpy, TensorFlow, PyTorch에서의 역행렬 계산
  8. Numpy 역행렬 계산
  9. TensorFlow 역행렬 계산
  10. PyTorch 역행렬 계산
반응형

역행렬이란?

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

 

X⋅X−1=X−1⋅X=IX⋅X−1=X−1⋅X=I

 

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

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

 

 

역행렬 계산 방식

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

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

X−1=1det(X)⋅adj(X)X−1=1det(X)⋅adj(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


  1. 역행렬이란?
  2. 역행렬의 존재 여부 판단하기
  3. 역행렬 계산 방식
  4. 1. 행렬식과 수반 행렬 사용
  5. 2. 가우스 조던 소거법 
  6. 3. LU 분해(LU decomposition)
  7. Numpy, TensorFlow, PyTorch에서의 역행렬 계산
  8. Numpy 역행렬 계산
  9. TensorFlow 역행렬 계산
  10. PyTorch 역행렬 계산
'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)
  • 블로그 메뉴

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

  • 공지사항

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

  • 태그

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

  • 최근 글

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

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.