1. NumPy 배열 기초

  • NumPy의 기본 단위는 ndarray (n-dimensional array)
  • 리스트보다 메모리 효율적이고 연산이 빠름
  • 엑셀 파일에서 숫자 데이터를 불러와 계산할 때, 벡터 연산으로 반복문을 없앨 수 있음

예시: Python 리스트와 NumPy 배열의 차이

import numpy as np
 
py_list = [1, 2, 3]
np_array = np.array([1, 2, 3])
 
try:
    print(py_list + 1)  # TypeError: Python List 는 브로드캐스팅 불가능
except TypeError as e:
    print(f"TypeError: {e}")
 
# NumPy 배열은 벡터 연산 가능
print(f"np_array: {np_array}")
print(f"np_array + 1: {np_array + 1}")  # [2 3 4]

2. 배열 연산, 인덱싱, 슬라이싱

  • for 루프 없이 배열 단위로 연산 가능
  • 인덱싱/슬라이싱은 Python 리스트처럼 직관적이며 더 강력함
  • 대용량 로그, 매출, 센서 데이터 등에서 조건 필터링 + 통계 연산을 빠르게 처리 가능

예시: 매출 데이터 통계

# 하루 단위 매출 (단위: 천원)
daily_sales = np.array([100, 200, 150, 300, 250])
 
# 평균
print("평균 매출:", daily_sales.mean())  # 200.0
 
# 200 이상인 날만 추출
high_sales = daily_sales[daily_sales >= 200]
print("고매출일:", high_sales)  # [200 300 250]

3. Shape Manipulation – 다차원 배열과 형상 변경

  • .reshape(), .ravel(), .transpose() 등으로 차원 변경 가능
  • 머신러닝 데이터 전처리, 이미지/행렬 처리에서 자주 사용
  • 이미지 처리, 머신러닝 모델 입력 전처리에서 필수
  • RAG 시스템의 벡터 임베딩 reshape 시 활용

예시: 1차원 배열을 2차원으로 변환

# 1차원 데이터
flat = np.array([1, 2, 3, 4, 5, 6])
 
# 2행 3열로 변환
reshaped = flat.reshape((2, 3))
print(reshaped)
# [[1 2 3]
#  [4 5 6]]

예시: 이미지 데이터 전처리

# 예: 100x100 RGB 이미지 → (height, width, channels)
img = np.random.randint(0, 255, size=(100, 100, 3), dtype=np.uint8)
 
# PyTorch 등의 모델 입력을 위해 (channels, height, width) 로 변환
img_transposed = img.transpose((2, 0, 1))
print(img_transposed.shape)  # (3, 100, 100)

References