reshape란?
reshape()는 배열(Array)의 모양(Shape)을 변경하는 함수이다.
중요한 점은 데이터를 변경하는 것이 아니라 데이터를 바라보는 구조(Shape)만 변경한다는 것이다.
예를 들어 1차원 배열이 있다고 가정해 보자.
import numpy as np
a = np.array([1,2,3,4,5,6])
print(a)
print(a.shape)
실행 결과
[1 2 3 4 5 6]
(6,)
현재 배열은 총 6개의 원소를 가진 1차원 배열이다.
이를 reshape()를 이용해 2행 3열의 구조로 변경할 수 있다.
b = a.reshape(2,3)
print(b)
print(b.shape)
실행 결과
[[1 2 3]
[4 5 6]]
(2,3)
여기서 중요한 점은 숫자의 순서는 그대로이고 배열을 바라보는 방식만 변경되었다는 것이다.
reshape의 규칙
reshape()를 사용할 때 반드시 기억해야 할 규칙이 있다.
전체 원소의 개수는 반드시 동일해야 한다.
예를 들어
a = np.array([1,2,3,4,5,6])
총 원소의 개수는 6개이다.
가능한 reshape
a.reshape(2,3) # 2 × 3 = 6
a.reshape(3,2) # 3 × 2 = 6
a.reshape(1,6) # 1 × 6 = 6
불가능한 reshape
a.reshape(4,2)
왜냐하면
4 × 2 = 8
인데 원래 데이터는 6개뿐이기 때문이다.
reshape는 복사(Copy)가 아니다
많은 사람들이 reshape()를 사용하면 새로운 배열이 생성된다고 생각한다.
하지만 대부분의 경우 reshape()는 같은 메모리를 다른 모양으로 바라보는 View를 반환한다.
import numpy as np
a = np.array([1,2,3,4,5,6])
b = a.reshape(2,3)
b[0,0] = 100
print(a)
결과
[100 2 3 4 5 6]
b를 수정했는데 a도 함께 변경되었다.
그 이유는 a와 b가 같은 메모리를 바라보고 있기 때문이다.
AI에서는 왜 reshape가 중요한가?
AI 모델은 데이터를 다양한 형태로 변환하며 계산한다.
예를 들어 문장 4개를 임베딩하면 다음과 같은 구조가 된다.
(4,768)
의미
- 4개의 문장
- 문장 하나당 768개의 숫자(임베딩)
Transformer에서는 이를 다시 여러 개의 Attention Head로 나누기 위해 reshape()를 사용한다.
예를 들어
(32,768)
↓
(32,12,64)
처럼 데이터를 재구성한다.
즉, reshape()는 데이터를 변경하는 것이 아니라 모델이 계산하기 좋은 형태로 구조를 변경하는 핵심 기능이다.
핵심 정리
- reshape()는 배열의 모양만 변경한다.
- 데이터의 개수는 절대 변하지 않는다.
- 대부분 View를 반환하므로 원본 데이터와 메모리를 공유한다.
- 딥러닝과 Transformer에서는 거의 모든 모델에서 reshape()를 사용한다.
'AI' 카테고리의 다른 글
| [AI] AI는 어떻게 '비슷한 의미'를 이해할까? - Cosine Similarity(코사인 유사도) 완벽 이해 (0) | 2026.07.03 |
|---|---|
| [AI]NumPy와 PyTorch의 차이 - AI 개발자는 왜 둘 다 배울까? (0) | 2026.07.03 |
| [AI] NumPy ndarray와 Shape 완벽 이해하기 (Batch, Embedding) (0) | 2026.07.03 |
| [AI] 개발 로드맵 - NumPy 시작 (0) | 2026.07.03 |