티스토리 뷰

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]]
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함