NumPy 배열의 shape 완벽 정리 😎 - reshape, ndmin, ndim까지 실전 가이드!
1. shape이 뭐길래 다들 그렇게 중요하대요? 🤔
머신러닝을 공부하다 보면 “shape이 안 맞아서 에러”라는 말을 수도 없이 듣게 됩니다.
그만큼 NumPy 배열의 .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이 정확히 맞아야 하고, reshape로 맞추는 게 실전에서 가장 안전한 방법이다.