AI는 데이터를 '차원'으로 이해한다

"왜 딥러닝을 공부하다 보면 Shape 오류가 그렇게 많이 발생할까?"
처음 AI를 공부하는 사람들은 이런 오류를 자주 만나게 됩니다.
ValueError:
Input shape is incompatible...
혹은
Expected shape (32, 32, 3)
but got (32, 32)
처음에는 에러 메시지만 보고도 막막합니다.
"Shape가 뭐지?"
"배열의 크기인가?"
"왜 숫자가 하나 부족한 것만으로도 실행이 안 되지?"
사실 이 문제는 딥러닝에서 갑자기 등장하는 개념이 아닙니다.
이미 NumPy부터 시작되는 아주 중요한 개념입니다.
지난 글에서는 왜 NumPy가 필요한지 알아보았습니다.
이번에는 한 단계 더 나아가,
NumPy는 데이터를 어떻게 저장하는지,
그리고 AI가 왜 데이터를 차원(Dimension) 으로 바라보는지 이해해 보겠습니다.
지난 글에서 배운 내용
우리는 Python List가 충분히 좋은 자료구조라는 것을 배웠습니다.
scores = [85, 90, 95]
하지만 AI는 수백만 개의 숫자를 하나씩 처리하지 않습니다.
대신 배열(Array) 이라는 하나의 덩어리로 계산합니다.
바로 이 Array가 NumPy의 핵심입니다.
List와 Array는 정말 다른 걸까?
먼저 두 코드를 비교해 보겠습니다.
Python List
scores = [85, 90, 95]
NumPy Array
import numpy as np
scores = np.array([85, 90, 95])
겉으로 보기에는 거의 같습니다.
둘 다
85
90
95
라는 숫자를 저장하고 있습니다.
그래서 처음에는
"그냥 대괄호 하나 더 생긴 거 아닌가?"
라고 생각하기 쉽습니다.
하지만 컴퓨터는 두 자료를 완전히 다르게 바라봅니다.
List는 '목록'이다
Python List는 말 그대로 목록(List)입니다.
예를 들어 오늘 해야 할 일을 저장한다고 생각해 보겠습니다.
todo = [
"운동",
"공부",
"독서"
]
혹은
data = [
10,
"Hello",
3.14,
True
]
이처럼 List에는
- 숫자
- 문자열
- Boolean
- 심지어 또 다른 List
까지 모두 함께 저장할 수 있습니다.
"여러 가지 물건을 담아두는 상자"
개념적으로 상자와 같이 생각할 수 있습니다.
유연하지만, AI처럼 대량의 숫자를 계산하기에는 최적화되어 있지는 않습니다.
Array는 숫자를 위한 공간이다
NumPy Array는 조금 다르게 생각합니다.
NumPy는 처음부터
"나는 숫자를 계산하기 위해 존재한다."
라는 철학으로 만들어졌습니다.
그래서 Array에는 가능한 한 같은 종류의 숫자를 연속적으로 저장합니다.
예를 들어
import numpy as np
scores = np.array([85, 90, 95])
NumPy는 이것을
85
90
95
라는 하나의 숫자 배열로 이해합니다.
중요한 점은NumPy는숫자가 몇 개인지보다
어떤 형태(Shape)로 배치되어 있는지
를 훨씬 중요하게 생각한다는 것입니다.
Shape란 무엇일까?
Shape를 아주 어렵게 생각할 필요는 없습니다.
Shape는데이터가 어떻게 배치되어 있는지 알려주는 정보입니다.
예를 들어
numbers = np.array([10, 20, 30, 40])
이 데이터를 그림으로 표현하면
10 20 30 40
한 줄입니다.
그래서 Shape는
(4,)
입니다.
여기서
4
는 숫자가 4개 있다는 뜻이고,
쉼표는 "이것은 1차원 배열이다." 라는 의미를 가지고 있습니다.
처음에는 쉼표가 이상해 보일 수 있지만,
Python에서는 튜플(Tuple) 을 표현하기 위해 (4,)처럼 작성합니다.
지금은 "한 줄짜리 배열" 정도로만 이해해도 충분합니다.
이번에는 2차원 배열을 보자
다음 데이터를 살펴보겠습니다.
matrix = np.array([
[1, 2],
[3, 4]
])
그림으로 보면
1 2
3 4
입니다.
이번에는 가로도 있고 세로도 있습니다.
그래서 Shape는
(2, 2)
입니다.
이 의미는
2개의 행(Row)
↓
각 행마다 2개의 열(Column)
입니다.
엑셀 표를 떠올리면 가장 이해하기 쉽습니다.
AI는 차원(Dimension)으로 데이터를 이해한다
우리는 평소 데이터를 이렇게 생각합니다.
학생 점수
↓
학생 이름
↓
사진
하지만 AI는 조금 다릅니다.
AI는 데이터의 종류보다 차원을 먼저 봅니다.
예를 들어 아래의 학생 점수는 1차원 데이터 입니다.
85 90 95
아래의 엑셀 표는 2차원 데이터 입니다.
이름 국어 영어
철수 90 80
영희 95 88
사진 한 장은 어떨까요?
사진은 아래와 같이 이루어져 있습니다.
가로
×
세로
×
색상(RGB)
높이
↓
너비
↓
색상 채널
사진은 3차원 데이터입니다.
그렇다면 사진이 1,000장이라면?
이번에는
사진 개수
↓
높이
↓
너비
↓
색상
이 됩니다.
1000장의 사진은 4차원 데이터입니다.
여기서 많은 사람들이 헷갈릴 수 있습니다.
"사진이 3차원이라고?"
우리가 보는 세상은 2차원 사진처럼 보이지만,
컴퓨터는 RGB라는 색상 정보까지 포함하기 때문에
3차원 데이터로 이해합니다.
왜 Shape가 그렇게 중요할까?
AI 모델은 데이터를 눈으로 보지 않습니다.
Shape를 먼저 확인합니다.
예를 들어, 모델이
(224, 224, 3)
크기의 이미지를 기대하고 있는데,
입력 데이터가 아래와 같다면,
(224, 224)
사람 눈에는 거의 같은 사진처럼 보여도
컴퓨터는
"색상 정보가 하나 부족하다."
라고 판단합니다.
그래서 실행을 멈추고 오류를 발생시키는 것입니다.
딥러닝에서 자주 보게 되는 Shape 오류는
사실 NumPy의 Array 개념에서부터 시작됩니다.
이번 글에서 기억해야 할 핵심
이번 글에서는 코드를 많이 작성하지 않았습니다.
그보다 더 중요한 개념을 이해하고자 했습니다.
- List는 다양한 데이터를 담는 목록이다.
- NumPy Array는 숫자를 계산하기 위한 배열이다.
- NumPy는 숫자의 개수보다 Shape를 더 중요하게 생각한다.
- AI는 데이터를 종류가 아니라 차원(Dimension)으로 이해한다.
이 네 가지를 이해했다면 앞으로 배우게 될 머신러닝과 딥러닝의 절반은 이미 시작한 셈입니다.
다음 글 예고
이번 글에서는 Array와 Shape를 이해했습니다.
그렇다면 새로운 질문이 생깁니다.
"NumPy는 왜 Python List보다 훨씬 빠를까?"
많은 사람들이 단순히 "C 언어로 만들어져서 빠르다"고 알고 있지만, 그것만으로는 충분하지 않습니다.
다음 글에서는 벡터화(Vectorization) 라는 개념을 통해,
NumPy가 어떻게 수많은 데이터를 한 번에 계산하는지 직접 코드로 확인해 보겠습니다.
'AI Journey > NumPy' 카테고리의 다른 글
| NumPy Slicing 완전 정복! 배열에서 원하는 데이터 범위를 자유롭게 선택하는 방법 (0) | 2026.08.02 |
|---|---|
| NumPy Indexing 완전 정복! 원하는 데이터만 선택하는 가장 쉬운 방법 (0) | 2026.08.02 |
| NumPy dtype이란? int32·float32·float64 차이와 AI에서 자료형이 중요한 이유 (0) | 2026.08.01 |
| NumPy는 왜 빠를까? Vectorization(벡터화)을 가장 쉽게 이해하기 (0) | 2026.08.01 |
| NumPy 입문: Python List가 있는데 왜 NumPy를 사용할까? AI가 배열(Array)을 사용하는 이유 (0) | 2026.07.30 |