ndarray 기초
ndarray(N-dimensional array)는 NumPy의 핵심 자료구조입니다. Python 리스트와 달리 동일한 데이터 타입의 원소만 저장하며, C 언어 수준의 연속 메모리 배치로 연산 속도가 매우 빠릅니다. 머신러닝에서 다루는 피처 행렬, 이미지 텐서, 임베딩 벡터 모두 ndarray입니다.학습 목표
- ndarray의 핵심 속성(shape, dtype, ndim, size)을 이해하고 활용할 수 있다
- 다양한 방법으로 배열을 생성할 수 있다
- reshape, ravel, flatten으로 배열의 형태를 변환할 수 있다
- copy와 view의 차이를 이해하고 데이터 안전성을 확보할 수 있다
왜 중요한가
ML/DL 파이프라인에서 데이터는 항상 ndarray(또는 이를 기반으로 한 텐서) 형태로 처리됩니다. 이미지 한 장은(높이, 너비, 채널) shape의 3차원 배열이고, 학습 배치는 (배치크기, 높이, 너비, 채널)의 4차원 배열입니다. shape과 dtype을 정확히 이해하지 못하면 모델에 데이터를 올바르게 전달할 수 없습니다.
배열 생성
기본 생성 함수
초기화 함수
순서와 범위 기반 생성
핵심 속성
| 속성 | 설명 | 예시 |
|---|---|---|
shape | 각 차원의 크기를 튜플로 반환 | (2, 3) |
ndim | 차원의 수 | 2 |
size | 전체 원소의 개수 | 6 |
dtype | 원소의 데이터 타입 | float64 |
itemsize | 원소 하나의 바이트 크기 | 8 |
nbytes | 배열 전체의 바이트 크기 | 48 |
자주 사용하는 dtype
| dtype | 설명 | 메모리 | 용도 |
|---|---|---|---|
np.int32 | 32비트 정수 | 4바이트 | 인덱스, 카운트 |
np.int64 | 64비트 정수 | 8바이트 | 큰 범위 정수 |
np.float32 | 32비트 실수 | 4바이트 | 딥러닝 학습 (기본) |
np.float64 | 64비트 실수 | 8바이트 | 과학 계산 (기본) |
np.bool_ | 불리언 | 1바이트 | 마스크, 필터 |
np.str_ | 유니코드 문자열 | 가변 | 텍스트 |
배열 형태 변환
reshape
reshape에서
-1은 한 축에만 사용할 수 있습니다. NumPy가 전체 원소 수에서 나머지 축의 크기를 나눠 자동으로 계산합니다. ML에서 배치 차원을 유지하면서 나머지를 평탄화할 때 자주 씁니다: arr.reshape(batch_size, -1).flatten과 ravel
차원 추가/제거
copy vs view
NumPy 배열 조작에서 가장 주의해야 할 개념입니다.| 구분 | view (뷰) | copy (복사) |
|---|---|---|
| 메모리 | 원본 데이터 공유 | 별도 메모리에 복사 |
| 수정 영향 | 원본에 반영됨 | 원본에 영향 없음 |
| 속도 | 빠름 | 느림 (메모리 할당) |
| 생성 방법 | 슬라이싱, reshape, ravel | .copy(), flatten |
AI/ML에서의 활용
- 피처 행렬 구성:
(샘플 수, 피처 수)shape의 2D 배열이 sklearn 모델의 입력 형식입니다 - 이미지 데이터:
(배치, 높이, 너비, 채널)shape으로 CNN에 입력합니다 - dtype 최적화:
float64대신float32를 사용하면 GPU 메모리를 절반으로 줄일 수 있습니다 - reshape: 모델 입력에 맞게 데이터의 shape을 변환하는 것은 가장 빈번한 작업입니다
리스트와 ndarray의 성능 차이는 얼마나 되나요?
리스트와 ndarray의 성능 차이는 얼마나 되나요?
같은 연산을 수행할 때 ndarray는 Python 리스트 대비 10~100배 빠릅니다. 이는 ndarray가 C로 구현된 연속 메모리 블록에서 벡터화 연산을 수행하기 때문입니다. 원소가 많을수록 차이가 커집니다.
reshape과 resize의 차이는 무엇인가요?
reshape과 resize의 차이는 무엇인가요?
reshape()는 전체 원소 수가 동일해야 하며 새로운 view를 반환합니다. resize()는 원소 수가 달라도 되며 배열 자체를 수정합니다(in-place). 일반적으로 reshape()를 사용하는 것이 안전합니다.ML에서 가장 많이 쓰는 dtype은 무엇인가요?
ML에서 가장 많이 쓰는 dtype은 무엇인가요?
scikit-learn은
float64를 기본으로 사용합니다. 딥러닝(PyTorch, TensorFlow)에서는 float32가 기본이며, 최근에는 메모리 절약을 위해 float16이나 bfloat16도 사용합니다.체크리스트
-
np.array(),np.zeros(),np.ones(),np.arange(),np.linspace()로 배열을 생성할 수 있다 - shape, ndim, size, dtype 속성의 의미를 설명할 수 있다
- reshape에서
-1의 의미를 이해하고 활용할 수 있다 - flatten과 ravel의 차이(copy vs view)를 설명할 수 있다
- copy와 view의 차이를 이해하고
.copy()를 적절히 사용할 수 있다 - ML 입력에 맞게 배열의 shape을 변환할 수 있다

