본문 바로가기
Python

[PYTHON] numpy reshape 완벽 가이드: 다차원 배열을 자유자재로 다루는 법

by Dev. Orion 2025. 7. 25.
반응형

numpy reshape 완벽 가이드: 다차원 배열을 자유자재로 다루는 법
[PYTHON] numpy reshape

 

Python에서 수치 계산과 배열 조작의 대표적인 라이브러리인 NumPy는 과학 계산, 데이터 분석, 머신러닝에서 핵심적인 역할을 한다. 그 중에서도 reshape() 함수는 배열의 구조를 바꿔주는 매우 강력하고 자주 사용되는 도구다. 본 글에서는 numpy.reshape의 개념부터 동작 원리, 주의할 점, 실무 예제까지를 체계적으로 정리했다. 초보자부터 전문가까지 모두가 이해할 수 있도록 설명하며, 단순한 문법 소개를 넘어 배열 구조에 대한 직관을 길러줄 것이다.

1. numpy.reshape란?

reshape()는 기존 배열의 데이터를 변경하지 않고, 배열의 구조(차원과 형태)만 바꾸는 함수다. 데이터의 수는 같지만 형상(shape)을 바꾸고자 할 때 사용된다.

import numpy as np

a = np.array([1, 2, 3, 4, 5, 6])
b = a.reshape((2, 3))

print(b)
# 출력:
# [[1 2 3]
#  [4 5 6]]

핵심: reshape의 총 요소 수 = 원본 배열의 총 요소 수 (데이터 개수가 같아야 함)

2. reshape()의 기본 문법

numpy.reshape(a, newshape)
파라미터 설명
a 입력 배열
newshape 변경할 새로운 형태 (예: (3, 2), (2, -1))

-1 사용법: 차원 중 하나를 -1로 설정하면 NumPy가 자동으로 맞는 크기를 계산해준다.

a = np.arange(12)
a.reshape(3, -1)  # (3, 4)로 자동 변환됨

3. reshape과 ravel/flatten의 차이

reshape은 구조만 바꾸고 원본 데이터에 영향을 주지 않지만, 경우에 따라 뷰(view)를 반환하기 때문에 원본을 수정하면 변경될 수 있음에 주의해야 한다.

기능 reshape ravel flatten
원본 유지 view 또는 copy view (가능 시) 항상 copy
속도 빠름 매우 빠름 느림
메모리 효율 좋음 최고 낮음

4. reshape 실패 예시 및 예외 처리

a = np.array([1, 2, 3, 4, 5])
a.reshape((2, 3))  # ValueError 발생

배열의 총 요소 수가 맞지 않으면 ValueError가 발생한다. reshape 전에 요소 개수를 확인하거나 try-except를 활용하자.

5. 고차원 배열 변환 예제

# 1차원 → 3차원
a = np.arange(24)
a3 = a.reshape((2, 3, 4))
print(a3.shape)  # (2, 3, 4)

reshape는 단지 (2차원 → 2차원)이 아닌, 1차원 ↔ n차원 변환까지 지원한다. 이미지 처리, 텐서 조작 등에서 유용하다.

6. 실무 활용 예제

6.1. 이미지 전처리

# 흑백 이미지 (28x28) 100장 → 2차원 행렬
images = np.random.rand(100, 28, 28)
flattened = images.reshape(100, -1)
print(flattened.shape)  # (100, 784)

6.2. 시계열 데이터를 샘플-윈도우 구조로

# 시계열 1D 배열 → (샘플 수, 윈도우 크기)
series = np.arange(100)
window_size = 10
samples = series.reshape(-1, window_size)
print(samples.shape)  # (10, 10)

6.3. 딥러닝 배치 구조로 변환

# (60000, 28, 28) 이미지 → (60000, 1, 28, 28)로 reshape
x = np.random.rand(60000, 28, 28)
x_reshaped = x.reshape(60000, 1, 28, 28)

7. reshape과 transpose의 차이점

기능 reshape transpose
목적 형태(차원 크기) 변경 차원 순서 변경
요소 수 동일 동일
사용 예 1D → 2D, 3D 등으로 확장 행과 열 전환, CNN 입력 구조 조정

8. reshape 사용 시 주의 사항

  • 원본 배열의 데이터 수와 reshape 이후의 데이터 수는 반드시 동일해야 함
  • reshape 이후 반환값은 view일 수 있으므로, 원본 변경 여부를 주의
  • 불필요한 reshape 남발은 코드 가독성을 해칠 수 있음

9. 결론: reshape은 배열을 자유자재로 다루는 열쇠

NumPy의 reshape()는 단순한 배열 형태 변경을 넘어, 데이터 전처리, 모델 입력 구조화, 메모리 최적화에 이르기까지 다양한 실무 분야에서 핵심적으로 활용된다. 배열의 본질을 이해하고 reshape를 능숙하게 다룰 수 있다면, NumPy는 더 이상 복잡한 수학 도구가 아닌 데이터 조작의 마스터 키가 될 것이다.


출처 (References)

728x90
반응형