티스토리 뷰

Transpose

전치행렬

  • 원본행렬의 행은 열로, 열은 행으로 바꾼 행렬을 의미한다.

  • 전치행렬의 표현은 윗첨자로 T를 이용한다.

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]]) # 2 x 3 ndarray

t_arr = arr.T  # 3 x 2 ndaray

# [[1 2 3]       [[1 4]
# [4 5 6]]  =>   [2 5]
#                [3 6]]
#   2 x 3   ->   3 x 2

print(arr)
print(t_arr)
  • 원본 행렬의 값을 바꾸면 전치 행렬도 바뀐다.
arr[0][0] = 100
print(arr)
# [[100   2   3]
# [  4   5   6]]
print(t_arr)
# [[100   4]
# [  2   5]
# [  3   6]]
  • 벡터(= 1차원 ndarray) 는 전치행렬이 의미가 없다.
arr  = np.array([1, 2, 3, 4])  # vecotr (1차원 ndarray)
t_arr = arr.T

print(arr)    # [1 2 3 4]
print(t_arr)  # # [1 2 3 4] => 벡터는 전치행렬이 의미가 x

# 하려면 이렇게
t_arr = arr.reshape(4, 1)
print(t_arr)
# [[1]
#  [2]
#  [3]
#  [4]]

Numpy Iterator

Iterator의 동작 방식과, 왜 쓰는지를 알아야 한다!!

  • Iterator : ndarray의 각 요소를 가르키는 객체

 

1) 1차원 -> c_index

  • 1차원 ndarray를 만들어서, for문으로 각 요소 출력하기
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

for tmp in arr:
    print(tmp, end=' ')
# 1 2 3 4 5 
  • 이 작업을 iterator를 이용해서 구현
arr = np.array([1, 2, 3, 4, 5])
it = np.nditer(arr, flags=['c_index']) # 1차원인 경우 - index 사용

while not it.finished: #iterator가 지정하는 위치가 끝이 아닐 동안 반복  
    idx = it.index # iterator가 현재 가리키는 곳의 index 숫자를 가르킨다.  
    print(arr\[idx\], end=' ')  
    it.iternext() # iterator를 다음 요소로 이동시키는 작업

# 1 2 3 4 5

2) 2차원 -> multi_index

  • 2차원 ndarray에 대해서 각 요소를 순서대로 출력하기

    • 0행 0열 -> 0행 1열 -> 0행 2열 -> 1행 0열 -> 1행 1열

arr = np.array([[1, 2, 3], [4, 5, 6]])

for row in range(arr.shape[0]):
    for col in range(arr.shape[1]):
        print(arr[row][col], end=' ')
# 1 2 3 4 5 6        
  • 만약 3차원이면 => for문이 3번 돌아야 한다. 차원이 높아질 수록 코드 처리가 힘들어진다.

  • 이 작업을 iterator를 이용해서 구현

arr = np.array([[1, 2, 3], [4, 5, 6]])
it = np.nditer(arr, flags=['multi_index']) # 다차원에서 사용됨

while not it.finished:    #iterator가 지정하는 위치가 끝이 아닐 동안 반복
    idx = it.multi_index         # iterator가 현재 가리키는 곳의 index 숫자를 가르킨다.
    print(arr[idx], end=' ')
    print(idx)
    it.iternext()          # iterator를 다음 요소로 이동시키는 작업
# 1 (0, 0)
# 2 (0, 1)
# 3 (0, 2)
# 4 (1, 0)
# 5 (1, 1)
# 6 (1, 2)
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
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
글 보관함