Python/Numpy

NumPy 배열의 shape 완벽 정리 😎

THINKRUNNER 2025. 5. 1. 15:57
NumPy 배열의 shape 완벽 정리 - reshape, ndmin, ndim까지 실전 가이드!

NumPy 배열의 shape 완벽 정리 😎 - reshape, ndmin, ndim까지 실전 가이드!

1. shape이 뭐길래 다들 그렇게 중요하대요? 🤔

머신러닝을 공부하다 보면 “shape이 안 맞아서 에러”라는 말을 수도 없이 듣게 됩니다. 그만큼 NumPy 배열의 .shape 속성은 데이터의 구조와 모양을 파악하는 데 가장 핵심이에요.

📌 한 줄 요약: shape = 배열의 구조 = 각 차원의 크기를 보여주는 튜플

2. .shape의 정체를 파헤쳐보자! 🔍

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)  # (2, 3)

2행 3열짜리 2차원 배열! 즉, .shape는 (2, 3)이라는 튜플을 반환해요. 1차원, 3차원, 4차원 배열에서도 마찬가지로 각각의 차원 크기를 보여줍니다.

3. shape를 바꾸고 싶다면 reshape! 🔧

arr = np.array([1, 2, 3, 4, 5, 6])
reshaped = arr.reshape(2, 3)
print(reshaped.shape)  # (2, 3)

주의! 원소 수가 맞지 않으면 reshape은 실패해요 ❌ reshape은 “총 원소 수는 같지만 모양을 바꾸는” 퍼즐 맞추기와 같아요.

4. 배열 만들 때 ndmin? 그거 언제 써요? 🤷‍♂️

ndmin은 배열을 만들 때만 사용할 수 있는 옵션이에요. 예를 들어 1차원 배열을 강제로 4차원으로 만들 수 있어요:

a = np.array([1, 2, 3, 4], ndmin=4)
print(a.shape)  # (1, 1, 1, 4)

하지만! 실전에서는 ndmin보다 정확한 reshape()를 쓰는 게 더 안전하고 추천돼요.

5. ndim과 shape은 무슨 차이야? 🤓

  • ndim: 차원의 수 (몇 겹으로 싸여 있냐)
  • shape: 각 차원의 크기

예를 들어 shape = (1, 1, 1, 4) 이면 → ndim = 4 하지만 반대로 ndim = 4라고 해서 shape = (1, 1, 1, 4)일 거라는 보장은 없어요.

6. 전처리에서 왜 shape이 그렇게 중요할까? ⚙️

모델에 데이터를 넣을 때 ndim만 같아서는 절대 안 돼요! 연산 가능하려면 각 차원의 크기까지 정확하게(shape) 맞아야 해요!

그래서 실전에서는 ndmin이 아니라 항상 정확하게 shape을 지정해주는 reshape((1, 1, 1, 4)) 같은 표현을 써야 합니다.

한 줄 정리: 계산하려면 shape이 같아야 한다. ndim이 같다고 안심하지 말자!

🎉 핵심 요약

shape는 배열의 정체성이다.
연산하려면 shape이 정확히 맞아야 하고, reshape로 맞추는 게 실전에서 가장 안전한 방법이다.

작성일: 2025-04-25