NumPy를 실무 흐름으로 이해하기
NumPy로 배열, 벡터화 연산, 브로드캐스팅, 인덱싱, 선형대수, 성능 최적화까지 익힙니다. Pandas, PyTorch, scikit-learn의 기반이 되는 수치 연산 도구입니다. 이 가이드는 개념을 나열하기보다, 실제 프로젝트에서 판단해야 하는 순서대로 내용을 따라갈 수 있게 구성했습니다.
NumPy로 배열, 벡터화 연산, 브로드캐스팅, 인덱싱, 선형대수, 성능 최적화까지 익힙니다. Pandas, PyTorch, scikit-learn의 기반이 되는 수치 연산 도구입니다.
NumPy로 배열, 벡터화 연산, 브로드캐스팅, 인덱싱, 선형대수, 성능 최적화까지 익힙니다. Pandas, PyTorch, scikit-learn의 기반이 되는 수치 연산 도구입니다. 이 가이드는 개념을 나열하기보다, 실제 프로젝트에서 판단해야 하는 순서대로 내용을 따라갈 수 있게 구성했습니다.
문법보다 요청이 들어와 검증, 처리, 저장, 응답으로 이어지는 경계를 먼저 잡습니다.
글로 읽은 내용을 머릿속에 오래 남기려면 먼저 흐름을 그림으로 잡는 편이 좋습니다. 아래 두 그림은 NumPy를 학습할 때 계속 되돌아볼 수 있는 기준 지도입니다.
NumPy를 처음 펼칠 때는 세부 명령보다 큰 그림이 먼저입니다. 이 섹션에서는 앞으로 배울 개념들이 어떤 문제를 풀기 위해 등장했는지부터 잡아봅니다.
| 개념 | 설명 |
|---|---|
| ndarray | 동일 타입 값을 담는 다차원 배열입니다. |
| vectorization | 반복문 대신 배열 단위로 계산합니다. |
| broadcasting | 서로 다른 shape의 배열을 규칙에 따라 맞춰 계산합니다. |
여기서는 배열 생성을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.
import numpy as np
x = np.array([[1, 2, 3], [4, 5, 6]])
y = np.arange(0, 6).reshape(2, 3)
print(x + y)여기서는 인덱싱 & 슬라이싱을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.
x = np.arange(12).reshape(3, 4)
# array([[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11]])
x[1, 2] # 6 — 1행 2열
x[:, 1] # array([1, 5, 9]) — 모든 행의 1번 열
x[0:2, 1:3] # 슬라이싱으로 부분 배열 추출
# 불리언 인덱싱 — 조건을 만족하는 원소만 선택
x[x > 5] # array([6, 7, 8, 9, 10, 11])
x[x % 2 == 0] = 0 # 짝수를 전부 0으로 치환여기서는 브로드캐스팅을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.
scores = np.array([[80, 90, 70], [60, 75, 95]]) # shape (2, 3)
weights = np.array([0.3, 0.3, 0.4]) # shape (3,)
weighted = scores * weights # weights가 (1, 3)으로 취급되어 각 행에 적용됨
print(weighted.sum(axis=1))여기서는 선형대수을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.
a = np.array([[1, 2], [3, 4]])
b = np.array([1, 0])
print(a @ b)
print(np.linalg.det(a))성능 & 메모리은 선택지가 갈리는 지점입니다. 표를 기준으로 각 방법의 쓰임새와 운영상의 차이를 비교해두면 이후 판단이 훨씬 쉬워집니다.
| dtype | 원소당 크기 | 주로 쓰는 곳 |
|---|---|---|
| float64 (기본값) | 8 bytes | 정밀도가 중요한 과학 계산 |
| float32 | 4 bytes | 딥러닝 모델 가중치 (메모리 절반으로 절약) |
| int8 / uint8 | 1 byte | 이미지 픽셀 값 (0~255) |
NumPy 실무 설계은 선택지가 갈리는 지점입니다. 표를 기준으로 각 방법의 쓰임새와 운영상의 차이를 비교해두면 이후 판단이 훨씬 쉬워집니다.
| 결정 지점 | 확인 질문 | 실무 기준 |
|---|---|---|
| 경계 | NumPy 코드에서 바뀌기 쉬운 부분은 어디인가? | 입출력, 설정, 외부 연동, 핵심 규칙을 분리합니다. |
| 상태 | 상태가 어디서 생성되고 어디서 사라지는가? | 상태 소유자와 수명 주기를 코드로 드러냅니다. |
| 장애 | 실패했을 때 호출자는 무엇을 받는가? | timeout, fallback, error contract를 먼저 정합니다. |
이 섹션은 NumPy 운영 기준을 실무 관점에서 정리합니다. 개념을 외우기보다, 어떤 상황에서 이 기준을 꺼내 쓸지에 초점을 맞춰보세요.
NumPy 검증 전략은 선택지가 갈리는 지점입니다. 표를 기준으로 각 방법의 쓰임새와 운영상의 차이를 비교해두면 이후 판단이 훨씬 쉬워집니다.
| 품질 축 | 검증 방법 | 완료 기준 |
|---|---|---|
| 정확성 | 정상/실패 케이스를 자동화합니다. | 핵심 시나리오가 재현 가능하게 통과합니다. |
| 회귀 방지 | 버그 수정 시 동일 케이스를 테스트로 남깁니다. | 같은 장애가 다시 배포되지 않습니다. |
| 운영성 | 로그, 메트릭, 알림을 확인합니다. | 문제가 생겼을 때 원인 추적 경로가 있습니다. |