티스토리 뷰
ndrary의 shape 조절 함수
reshape()
: 원하는 형태 (shape)으로 ndarray의 shape을 조절rave()
: 1차원 vector (1차원 ndarray)로 shape을 변형- 둘 다 view만 바꿈
resize()
:reshape()
과 상당히 유사- reshape()은 요소가 갯수가 맞지 않으면 안되지만
- resize()는 요소의 갯수가 맞지 않아도 shape이 변경된다.
1. reshape()
함수
ndarray는 shape을 가지고 있다.
shape 속성의 값을 바꾸어서 ndarray의 형태를 변경하는 것은 그다지 좋지 않다.
대신, reshape() 함수를 사용한다.
- 1)
reshape()
은 새로운 ndarray를 만드는게 아니라, View를 생성한다.
import numpy as np
# 1) View
arr = np.arange(0, 12, 1)
print(arr) # [ 0 1 2 3 4 5 6 7 8 9 10 11]
arr1 = arr.reshape(4, 3) # 새로운 ndarray를 만드는게 아니라, View를 생성.
print(arr1) # [[ 0 1 2]
# [ 3 4 5]
# [ 6 7 8]
# [ 9 10 11]]
arr[0] = 100
# View를 통해 데이터를 공유하기 때문에, View의 데이터값도 변한다!!
print(arr) # [100 1 2 3 4 5 6 7 8 9 10 11]
print(arr1) # [[100 1 2]
# [ 3 4 5]
# [ 6 7 8]
# [ 9 10 11]]
- 2) -1로 인자 자동 설정한다.
# 2) -1로 인자 자동 설정
arr = np.arange(0, 12, 1)
print(arr)
# [ 0 1 2 3 4 5 6 7 8 9 10 11]
arr1 = arr.reshape(2, -1) # 앞의 값만 2로 결정하면 뒤의 값도 결정된다.
# -1은, 음수값을 넣는게 아니라 자동으로 결정하라는 뜻
print(arr1) # [[ 0 1 2 3 4 5]
# [ 6 7 8 9 10 11]]
arr1 = arr.reshape(-1, 4)
print(arr1) # [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
arr1 = arr.reshape(2, 2, -1)
print(arr1) # [[[ 0 1 2]
# [ 3 4 5]]
# [[ 6 7 8]
# [ 9 10 11]]]
- 3) copy()
# 3) copy()
arr = np.arange(0, 12, 1)
print(arr) # [ 0 1 2 3 4 5 6 7 8 9 10 11]
arr1 = arr.reshape(2, 6).copy() # View가 아닌, 진짜 shape을 바꾼 ndarray를 만들 때
print(arr1)
2. ravel()
함수
ndarray의 모든 요소가 포함된 1차원 vector의 View를 리턴.
arr = np.arange(0, 10, 1).reshape(5, -1).copy() # 5 x 20
print(arr) # [[0 1]
# [2 3]
# [4 5]
# [6 7]
# [8 9]]
arr1 = arr.ravel()
print(arr1) # [0 1 2 3 4 5 6 7 8 9]
3. resize()
# 정수 형태의 난수를 이용해서 (3, 4) shape을 가지는 ndarray를 생성
np.random.seed(10)
arr = np.random.randint(0, 10, (3, 4)) # 0 <= x < 10
print(arr)
# result = arr.resize(2, 6) # resize()는 스스로 바뀌고 return 값이 없다
# print(result) # None
arr.resize(2, 6) # View가 생성되지않고 원본이 바뀐다.
print(arr)
- reshape()은 요소가 갯수가 맞지 않으면 안되지만
- resize()는 요소의 갯수가 맞지 않아도 shape이 변경된다.
arr.resize(3, 5) # resize()는 요소의 갯수가 맞지 않아도 shape이 변경된다.
print(arr) # 요소 수가 늘어나면 모자란 부분은 0으로 세팅
# [[9 4 0 1 9]
# [0 1 8 9 0]
# [8 6 0 0 0]]
arr.resize(2, 2) # 요소 수가 줄어들면 기존 데이터를 버린다.
print(arr)
# [[9 4]
# [0 1]]
'멀티캠퍼스 AI과정 > 03 Numpy' 카테고리의 다른 글
Numpy 06 - ndarray의 사칙연산, 행렬곱, Broadcasting (0) | 2020.09.08 |
---|---|
Numpy 05 - ndarray의 Indexing & Slicing (0) | 2020.09.08 |
Numpy 03 - 랜덤으로 ndarray 생성 (0) | 2020.09.08 |
Numpy 02 - ndarray 생성과 차원 관련 속성 (0) | 2020.09.08 |
Numpy 01 - Introduction (0) | 2020.09.08 |
댓글