티스토리 뷰
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)
'멀티캠퍼스 AI과정 > 03 Numpy' 카테고리의 다른 글
Numpy 09 - ndarray의 정렬 (0) | 2020.09.09 |
---|---|
Numpy 08 - Numpy 집계함수와 axis(축) (0) | 2020.09.09 |
Numpy 06 - ndarray의 사칙연산, 행렬곱, Broadcasting (0) | 2020.09.08 |
Numpy 05 - ndarray의 Indexing & Slicing (0) | 2020.09.08 |
Numpy 04 - ndarray의 shape 조절 함수 (0) | 2020.09.08 |
댓글