티스토리 뷰

 

Project : Py_EX

Python file : EX03_arraycal.py (이어서)

Module : Numpy (as np)

IDE : PyCharm [설치방법]



이전 글 참조

 

[Python] 행렬 만들고 연산까지 해보기1

Project : Py_EX Python file : EX03_arraycal.py Module : Numpy (as np) IDE : PyCharm 공학분야를 다루다 보면 행렬(matrix)연산은 기본적으로 많이 다루게 되는데, matlab에서는 이를 굉장히 간단하게 다룰..

generalbulldog.tistory.com

 

이전 글에 이어서 Python에서 행렬을 다루는 법을 조금 더 공부해보자. 나중에 꼭 필요하다. 그러한 차원에서  numpy.array (사용은  np.array 로 한다)의 능력을 조금 더 알아보려 한다.

 

여기서는 "행렬" 하면 생각나는 

 

  • 행렬식 (Determinant)
  • 역행렬 (Inverse matrix)
  • 전치행렬 (Transpose matrix)
  • 단위행렬 (Identity matrix)

을 생성 및 계산 해보자.

 

 

 

## 행렬식 (Determinant)

# np.linalg.det()

 

선형대수학에서, 행렬식(行列式, 영어: determinant 디터미넌트)은 정사각 행렬에 스칼라를 대응시키는 함수의 하나이다. 실수 정사각 행렬의 행렬식의 절댓값은 그 행렬이 나타내는 선형 변환이 초부피를 확대시키는 배수를 나타내며, 행렬식의 부호는 방향 보존 여부를 나타낸다.   * 위키백과

 

실습을 해보기 위해 정사각 행렬을 만들어 보자.

2X2 정사각 행렬

2x2 행렬 정도는 암산으로 계산이 가능하다. 

 

determinant 계산

Python의 NumPy에서 이 계산을 하기 위해서는 선형대수(Linear Algebra) 함수  numpy.linalg 를 사용해야 한다. NumPy의 linalg 함수에는 행렬식을 비롯해서 행렬 및 벡터의 곱, 고유값, 조금 후 해볼 역행렬 등의 많은 선형대수 함수가 내장되어 있다. 여기서는 행렬식 함수인  np.linalg.det 를 사용해보자.

 

import numpy as np

d_array = np.array([[2, 5], [1, 3]])                # numpy.array를 사용하여 2x2 행렬 생성
d_array_det = np.linalg.det(d_array)                # d_array 행렬의 determinant 연산
print(d_array_det)                                  # determinant 연산 결과 출력

 

결과창

1.0

 

결과는 위에서 계산한 결과와 동일한 결과를 출력해 준다. 2x2 행렬정도는 손계산으로 쉽게 계산 되겠지만 더 고차원의 행렬이 되면 Python의 힘을 빌리자.

 

그리고  numpy.linalg 의 함수들이 어떤 것들이 있는지 더 알고싶다면 링크(numpy.linalg 매뉴얼)를 참고하자. 필요할 때 그때그때 찾아서 사용해 보면 되겠다.

 

 

Linear algebra (numpy.linalg) — NumPy v1.19 Manual

The NumPy linear algebra functions rely on BLAS and LAPACK to provide efficient low level implementations of standard linear algebra algorithms. Those libraries may be provided by NumPy itself using C versions of a subset of their reference implementations

numpy.org

 

 

## 역행렬

# np.linalg.inv()

 

선형대수학에서, 가역 행렬(可逆行列, 영어: invertible matrix) 또는 정칙 행렬(正則行列, 영어: regular matrix) 또는 비특이 행렬(非特異行列, 영어: non-singular matrix)은 그와 곱한 결과가 단위 행렬인 행렬을 갖는 행렬이다. 이를 그 행렬의 역행렬(逆行列, 영어: inverse matrix)이라고 한다.  * 위키백과

 

위에서 만들었던 2x2 정사각 행렬의 역행렬을 구해보자. 공식을 모르겠으면 바로 위의 위키백과 링크를 타고들어가서 살짝 보고오자.

 

2x2 행렬의 역행렬 계산

 

이번에는 Python에서 해보자.

 

import numpy as np

d_array = np.array([[2, 5], [1, 3]])                # numpy.array를 사용하여 2x2 행렬 생성
d_array_inv = np.linalg.inv(d_array)                # d_array 행렬의 역행렬 연산
print(d_array_inv)                                  # 역행렬 연산 결과 출력

결과창

[[ 3. -5.]
 [-1.  2.]]

 

당연히 동일한 결과를 출력해 준다. 

 

 

 

## 전치행렬

# np.transpose() or a.transpose() or a.T

 

선형대수학에서, 전치 행렬(轉置行列, 영어: transposed matrix)은 행과 열을 교환하여 얻는 행렬이다.  * 위키백과

 

전치행렬

 

Python에서 전치행렬은 아주 쉽게 구할 수 있는데, 세 가지 방법이나 있다. 

 

import numpy as np

d_array = np.array([[2, 5], [1, 3]])                # numpy.array를 사용하여 2x2 행렬 생성
print(np.transpose(d_array))                        # np.transpose()를 이용한 전치행렬 출력
print(d_array.transpose())                          # a.transpose()를 이용한 전치행렬 출력
print(d_array.T)                                    # a.T 를 이용한 전치행렬 출력

결과창

[[2 1]
 [5 3]]
[[2 1]
 [5 3]]
[[2 1]
 [5 3]]

 

세 방법 모두 같은 결과를 출력해준다. NumPy의 함수인데 앞에 앞에 모듈이름 np를 안붙여도 작동한다. 신기하다.

 

 

 

 

## 단위행렬

# np.eye()

 

선형대수학에서, 단위 행렬(영어: identity matrix)은 주대각선의 원소가 모두 1이며 나머지 원소는 모두 0인 정사각 행렬이다.     * 위키백과

 

3x3의 단위행렬을 만들어 보자.

 

3x3 단위행렬

 

Python에서는  np.eye() 를 사용하면 된다.

 

import numpy as np

print(np.eye(3))                                    # 3x3 단위행렬 생성

결과창

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

 

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/08   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함