NumPy reshape() 완벽 정리! 🔥 - 사용법, -1 옵션, ndim 차이까지 한 번에
1. reshape()란 무엇인가요? 🤔
reshape()
는 배열의 모양(=shape)을 바꿀 때 사용하는 함수입니다.
배열 안의 원소의 수는 그대로 유지하면서, 다른 차원 구조로 변환할 수 있어요.
📌 한 줄 요약
reshape = 값은 그대로, 모양만 바꾼다!
2. reshape() 기본 사용법 🔧
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6])
newarr = arr.reshape(2, 3)
print(newarr)
# 출력:
# [[1 2 3]
# [4 5 6]]
6개의 원소를 2행 3열 형태로 재배치했습니다! 원소 수(6개)는 변하지 않고, 배열 모양만 바뀐 거예요.
3. reshape와 ndim의 차이 궁금했죠? 👀
- ndim은 배열이 "몇 차원"인지를 알려주는 속성.
- reshape()은 배열의 "구체적인 차원 구조"를 바꾸는 함수.
✅ 즉, ndim
은 정보(info), reshape()
는 행동(action)!
4. reshape()의 슈퍼 능력: -1 자동 계산 ✨
reshape을 사용할 때 -1을 넣으면, 그 자리에 필요한 크기를 NumPy가 자동으로 계산해줘요!
arr = np.array([1, 2, 3, 4, 5, 6])
newarr = arr.reshape(2, -1)
print(newarr)
# 출력:
# [[1 2 3]
# [4 5 6]]
여기서 -1은 "나머지 칸은 알아서 계산해줘!" 라는 뜻입니다.
총 원소 수(6개)에서 2행을 나눴으니, 3열은 자동으로 맞춰진 거예요.
✔ 언제 -1을 사용할까?
- 원소 수를 일일이 세기 귀찮을 때
- 배치 크기(batch size)만 지정하고, 나머지는 자동으로 계산하고 싶을 때
- 모델 입출력에 맞춰 유연하게 형태를 맞춰야 할 때
5. -1은 딱 한 번만 써야 한다! ❗
reshape에서는 -1을 단 하나만 사용할 수 있어요. 만약 두 개 이상의 -1을 쓰면 NumPy가 "어디를 몇 개로 나눠야 할지" 혼란스러워서 에러를 냅니다. ➔ reshape은 총 원소 수라는 하나의 방정식만 있으니, 미지수도 딱 하나만 가능해야 해요!
6. reshape는 copy가 아니라 view! 🔥
reshape은 기본적으로 값은 그대로 두고, 모양(shape)만 해석하는 방식이에요. 그래서 가능하면 새 메모리를 복사하지 않고(view) 기존 메모리를 그대로 활용합니다. ➔ 속도 빠르고, 메모리 절약!
단, 메모리 연속성(Contiguity)이 깨진 경우에는 어쩔 수 없이 copy가 생길 수도 있어요. NumPy는 기본적으로 계산 성능과 메모리 최적화를 위해 reshape을 view로 처리하는 걸 우선합니다.
7. reshape할 때 가장 중요한 규칙! 🚨
reshape할 때는 반드시 전체 원소 수가 일치해야 합니다.
(원소가 6개라면, 2x3, 3x2, 1x6, 6x1만 가능)
arr = np.array([1, 2, 3, 4, 5, 6])
# arr.reshape(4,2) # ❌ 오류! 총 8개가 필요한데 현재는 6개뿐
✔ 한 줄 정리
원소 수가 안 맞으면 reshape은 무조건 에러 난다!
🎉 핵심 요약
reshape()는 NumPy 배열의 형태를 자유자재로 바꾸는 필수 도구입니다. -1 옵션으로 편리하게 차원을 맞출 수 있고, 원소 수만 일치하면 어떤 모양이든 가능합니다!