HackerRank 문제: https://www.hackerrank.com/challenges/np-transpose-and-flatten/problem
input:
2 2
1 2
3 4
output:
[[1 3]
[2 4]]
[1 2 3 4]
import numpy as np
first = input().split(' ')
rows, columns = int(first[0]), int(first[1])
data = []
for _ in range(rows):
next = input().split(' ')
data.append([int(x) for x in next])
# list를 numpy array로 바꿔준다.
result = np.array(data)
print(result.transpose())
print(result.flatten())
① numpy.transpose(self, axes=None) 는 배열의 transpositon을 리턴한다.
② numpy.flatten(order='C') 는 다차원 배열을 1차원 배열로 변환해서 리턴한다.
order parameter은 default 값이 C이다.
'C' = row-major order로 flatten한다. : row 먼저
'F' = column-major order로 flatten한다. : column 먼저
'K' = 메모리에 발생하는 순서대로 flatten한다.
③ numpy.ravel()과의 차이점?
(1) flatten은 메모리를 차지하기 때문에 ravel보다 느리다.
(2) ravel()은 일차원으로 바뀐 뷰를 리턴하고, flatten()은 일차원으로 바뀐 복사본을 리턴한다.
예시)
# 뷰를 리턴하는 ravel()
>>> array2 = np.array([[1, 2], [3, 4]])
>>> print(array2)
>>> array3 = array2.ravel()
>>> print(array3)
>>> array3[0] = 1000
>>> print(array3)
>>> print(array2)
# [[1 2]
# [3 4]]
# [1 2 3 4]
# [1000 2 3 4]
# [[1000 2]
# [ 3 4]]
# 복사본을 리턴하는 flatten()
>>> array2 = np.array([[1, 2], [3, 4]])
>>> print(array2)
>>> array3 = array2.flatten()
>>> print(array3)
>>> array3[0] = 1000
>>> print(array3)
>>> print(array2)
# [[1 2]
# [3 4]]
# [1 2 3 4]
# [1000 2 3 4]
# [[1 2]
# [3 4]]
→ 맨 마지막에 원본 배열 array2를 출력했을 때 revel()은 값이 바뀌어져있고, flatten()은 값이 변하지 않았음을 확인할 수 있다. flatten()은 복사본이기 때문에 flatten()을 이용해서 새로 만든 객체 array3을 변경해도 원본에 영향을 주지 않는다. 그러나 ravel()은 원본 배열의 뷰를 리턴해서, 변경하면 원본에 영향을 준다.
→ 차이점 (1)의 이유도 여기서 찾을 수 있다. flatten()은 복사본을 저장해서 메모리를 차지한다. 그러나 ravel()은 메모리를 차지하지 않아서 더 빠르다.
연습)
>>> array1 = np.array([[1, 2], [3, 4]])
>>> print(array1.flatten())
>>> print(array1.flatten('F'))
>>> print(array1.flatten('A'))
>>> print(array1.flatten('K'))
# [1 2 3 4]
# [1 3 2 4]
# [1 2 3 4]
# [1 2 3 4]
'Computer Science > [20-4] Numpy 연습' 카테고리의 다른 글
[Numpy] (6) Array Mathematics (0) | 2020.04.03 |
---|---|
[Numpy] (5) Eye and Identity (0) | 2020.04.02 |
[Numpy] (4) Zeros and Ones (0) | 2020.04.01 |
[Numpy] (3) Concatenate로 여러개의 배열 합치기 (0) | 2020.03.31 |
[Numpy] (1) Numpy arrays basic (0) | 2020.03.29 |
댓글