[Python.NumPy] Identity 행렬, eye, diag 함수 이해하기 - Creation Function III

2020. 12. 6. 05:00Python과 머신러닝/NumPy 데이터 분석

0. 요약

 

1. Identity 행렬 만들기

#identity 행렬 만들기 (대각 행렬, 대각선이 1인 행렬) 			 
In [1]:np.identity(n=5, dtype=np.int8) # 5x5의 np.int8의 identity 행렬 생성
Out[1]: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]], 
              dtype=int8)
              
  • Identity matrix항등 행렬 혹은 단위 행렬 이라고 불린다..
  • 쉽게 말해 가운데 대각선의 값이 전부 1이고, 나머지는 0으로 채워진 행렬을 뜻한다.
  • 숫자들 간의 곱셈을 할 때 어떤 수를 1과 곱해도 원래의 숫자가 나오듯, Identity matrix는 어떤 행렬을 곱해도 원래의 행렬이 나오는 행렬을 의미한다.
  • 그래서 identity matrix라는 이름을 붙였는데, 오히려 항등 행렬/단위행렬이란 이름은 직관적이지 못하다고 생각한다.
  • n은 row/col의 개수로 전달하고, dtype으로 데이터 타입을 지정해주면, n x n의 identity 행렬이 생성된다.

 

2. np.eye 함수

In [2]:np.eye(N=3, M=5, # 총 행렬의 크기는 3x5 로 만들어 달라 
               k=1, # identity matrix의 시작은 1열부터 시작하라 
			   dtype=np.int8) # dtype은 int8로 설정
Out[2]:array([[0, 1, 0, 0, 0], 
              [0, 0, 1, 0, 0], 
              [0, 0, 0, 1, 0]], 
              dtype=int8)
              
  • eye 함수로 생성되는 배열은 identity와 유사하다.
  • 차이는 Identity 행렬은 항상 nxn의 행렬이라면, eye는 원하는 NxM으로 행렬을 만들 수 있다.
  • k 변수를 통해서 identity matrix가 시작할 열을 지정해줄 수 있다.
  • 위의 예제에서 보면, N=3/M=5/k=1이기 때문에
    3x5 행렬을 만들고, 1번 열부터 시작하여 1을 대각선으로 입력하고, 나머지는 0으로 채워진 행렬을 array 형태로 반환한다.

 

3. np.daig 함수

In [3]:matrix = np.arange(9).reshape(3,-1) 
       matrix
Out[3]:array([[0, 1, 2], 
              [3, 4, 5], 
              [6, 7, 8]])
              
In [4]:np.diag(matrix, k=1) #matrix의 k열을 기준으로 대각선에 있는 값들을 array에 담아서 반환함
Out[4]:array([1, 5])
  • diag 함수는 parameter로 전달받은 행렬의 k번째 열부터 있는 대각선의 값들을 1차원 array로 반환하는 함수이다.
  • np.diag(matrix, k=1)은 'matrix 행렬의 1번 열부터의 대각선 값들을 반환해줘' 라는 요청이 된다.
  • 그렇기 때문에 [0, 1], [1, 2]에 있는 값들을 뽑아서 하나의 배열로 반환한다.
  • 그래서 Out[4]는 [1, 5]의 값을 반환하게 된다.

 

4. 마무리

  • Identity 행렬은 행렬의 계산에 항상 필요하기 때문에, 어떤 parameter로 동작하는지 기억해두자.
  • eye와 diag 함수도 때에 따라 요긴하게 쓰이는 상황들이 생긴다. 저걸 직접 구현하려면 노력 대비 너무 단순한 기능이기 때문에, 주어진 함수를 잘 사용해서 더 의미 있는 알고리즘을 짜는데 시간을 투자하자.

 

관련 글

2020/12/04 - [Python과 머신러닝/Python 데이터 수집] - NumPy arange/zeros/empty 함수의 차이 - Creation Function I

2020/12/05 - [Python과 머신러닝/Python 데이터 수집] - NumPy ones_like, zeros_like, empty_like 함수 - Creation Function II

반응형