Numpy array reshape -1이란

안녕하세요 jay입니다.
오늘은 Numpy array의 메소드 중 하나인 reshape와
-1의 역할에 대해 알아보도록 하겠습니다.

# repalce and -1
# "-1"의 역할은 전에 array의 shape를 기억한 다음, 그에 맞는 약수로 대체
# ex) arr = 4x3행렬이라 가정, -1,4 => 3,4 행렬이 됨

import numpy as np

# 4x3 array

arr = np.arange(12).reshape(4,3)
print(arr)
"""
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
"""
print(arr.shape) # (4, 3)

# 3x4 array

arr = arr.reshape(3,4)
print(arr)
"""
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
"""

# -1x3 array

arr = arr.reshape(-1,3)
print(arr)
"""
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
"""
print(arr.shape) # (4, 3)

# 1x-1 array

arr = arr.reshape(1,-1)
print(arr) # [[ 0  1  2  3  4  5  6  7  8  9 10 11]]
print(arr.shape) # (1, 12)
reshape는 말 그대로 행렬의 형태를 바꾸는 함수입니다. 위와 같이 reshape(3,4)를 하면 4x3행렬을 3x4행렬로 reshape합니다. 그런데 아래 reshape에 들어가는 값 중 -1이 있습니다. 이를 사용하기 위해선 기존 array의 shape와 호환이 되어야 합니다. 
예를 들어 3x4행렬은 12개의 element들로 구성되어 있으므로, 이 12개의 element들로 만들 수 있는 형태로만 reshape가 가능합니다. 여기서 위와 같이 arr.reshape(-1,3)이면 -1은 이 12개의 element들로 만들 수 있는 형태 중 4로 ((4,3)만 가능하기 때문) 대체가 됩니다.
이렇듯 reshape에서 -1은 행렬의 형태 혹은 차원수를 추측하는데 사용이 가능합니다.

댓글