Python NumPy 완전 정복 가이드 (2026 버전)
처음 Jupyter Notebook을 열고 빈 셀을 멍하니 바라보다가 이런 생각 해본 적 있나요?
“분명 Python은 아는데… 왜 다들 NumPy, NumPy 하는 거지?”
솔직히 말하면, 저도 그랬습니다. 약간 집단 주문처럼 들리죠.
NumPy는 Numerical Python의 줄임말이고, Data Science, AI, Machine Learning, Scientific Computing 분야에서 사실상 기본 언어처럼 쓰이는 라이브러리입니다. 겉으로는 조용해 보이지만, 내부에서는 엄청난 일을 처리하고 있어요.
한 줄로 요약하면 이렇습니다.
NumPy는 숫자 계산 세계에서 ‘수레’에서 ‘컨베이어 벨트’로 업그레이드하는 느낌이다. 같은 짐인데 속도가 완전히 다르다.
이 글에서는 설치부터 시작해서 array 생성, dtype, 다차원 배열, slicing, reshape, axis 개념, 통계 연산, linear algebra, 그리고 실제 예제까지—원본 스크립트의 내용을 하나도 빠뜨리지 않고, 한국어 감성으로 자연스럽게 풀어봅니다.

NumPy 설치와 Jupyter Notebook 환경
NumPy 관련 내용은 공식 문서(numpy.org)를 기반으로 하지만, 그대로 읽으면 살짝 딱딱하죠. 그래서 핵심만 추려서 실습 중심으로 정리합니다.
NumPy 설치
터미널을 열고 아래 명령어를 실행하세요.
pip install numpy
- Windows 환경이라면 대부분 이 명령으로 바로 됩니다.
- macOS / Linux에서는 보통 아래를 사용합니다.
pip3 install numpy
NumPy import 하기
NumPy는 거의 항상 이렇게 불러옵니다.
import numpy as np
np는 사실상 업계 표준 별명이라고 봐도 무방합니다.
왜 Jupyter Notebook이 좋을까?
NumPy 작업은 ‘만져보면서 이해하는’ 게 핵심입니다. 셀 하나 실행하고 결과 보고, 다시 수정하고—이 흐름에 Jupyter Notebook만큼 잘 맞는 도구도 드물죠.
VS Code(또는 Cursor 등) 기준으로:
- Ctrl + Shift + P (Mac은 Command + Shift + P)
- Jupyter 입력
- Create New Jupyter Notebook 선택
.ipynb 확장자의 파일이 열릴 거예요.
여기서:
- Markdown 셀로 설명을 적고
- Code 셀로 바로 실행해볼 수 있습니다.
NumPy란 정확히 뭘까?
NumPy는 한마디로 말해:
- 대용량 multi-dimensional array와 matrix를 다루고
- 그 위에서 빠른 수치 계산을 가능하게 해주는 라이브러리입니다.
Data Science, Machine Learning, Scientific Computing 쪽에서는 거의 필수고요.
속도가 빠른 이유요?
내부 연산의 상당 부분이 **C / C++**로 구현되어 있기 때문입니다.
TensorFlow, PyTorch 같은 유명한 framework들도 내부적으로 NumPy 개념을 적극적으로 활용합니다. 그래서 NumPy를 이해하면, 상위 framework에서 무슨 일이 벌어지는지도 훨씬 잘 보입니다.
왜 NumPy를 써야 할까? (속도와 vectorization)
Python list는 분명 편합니다. 하지만 숫자 계산이 많아지면 얘기가 달라집니다.
NumPy array는:
- 메모리 사용이 효율적이고
- 대규모 연산에서 훨씬 빠르며
- vectorized operation을 기본으로 제공합니다.
Python list vs NumPy array
py_list = [1, 2, 3, 4, 5]
np_array = np.array([1, 2, 3, 4, 5])
겉보기엔 비슷하지만 내부 구조는 완전히 다릅니다.
- Python list → list
- NumPy array → numpy.ndarray
vectorized operation 예시
Python list에서 모든 값에 10을 더하려면 보통 이렇게 하죠.
[x + 10 for x in py_list]
NumPy에서는 훨씬 간단합니다.
np_array + 10
이게 바로 vectorization입니다. loop 없이 한 번에 처리합니다.
속도 차이 체감하기
스크립트에서는 1,000,000개 요소를 대상으로 비교합니다.
- Python list + for loop
- NumPy array + scalar addition
결과는 대략:
- Python list: 약 0.035초
- NumPy: 약 0.001초
환경마다 다르겠지만, 수십 배 차이가 나는 경우가 흔합니다.
NumPy array 생성 방법 정리
Python list에서 생성
np.array([1, 2, 3, 4, 5])
※ NumPy array는 기본적으로 동일한 type을 가집니다.
np.arange()
np.arange(0, 10, 2)
Python의 range()와 비슷하지만 array를 반환합니다.
np.linspace()
np.linspace(0, 1, 5)
구간을 균등하게 나눈 값들을 생성합니다.
zeros, ones, full
np.zeros(5)
np.ones(5)
np.full(5, 7)
identity matrix
np.eye(3)
random 값 생성
np.random.random(5)
np.random.randint(0, 10, 5)
실행할 때마다 값이 달라집니다. 진짜 랜덤이니까요.
dtype: NumPy array의 데이터 타입
NumPy array는 항상 하나의 dtype을 가집니다.
arr = np.array([1, 2, 3])
arr.dtype
- 정수만 있으면 보통 int32
- 소수점이 있으면 float64
int + float 섞이면?
np.array([1, 2.5, 3])
→ 자동으로 float64
NumPy는 표현 가능한 쪽으로 type을 승격(promote) 합니다.
dtype 직접 지정
np.array([1, 2, 3], dtype=np.float32)
astype()으로 변환
arr.astype(np.float32)
새로운 array가 생성됩니다.
- float32 → 4 bytes
- float64 → 8 bytes
메모리 민감한 상황에서는 꽤 중요해집니다.
Multi-dimensional array 이해하기
1D array
[1, 2, 3, 4, 5]
2D array (matrix)
matrix = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
- shape → (3, 3)
- ndim → 2
- size → 9
3D array (페이지 개념)
arr3d = np.array([
[[1,2,3],[4,5,6]],
[[7,8,9],[10,11,12]]
])
shape (2, 2, 3) =
- 2 pages
- 2 rows
- 3 columns
shape로 직접 생성
np.zeros((3, 4))
np.ones((2, 3, 4))
Indexing & Slicing
1D indexing
arr[0]
arr[-1]
arr[1:4]
arr[::2]
2D indexing
matrix[1, 2]
matrix[0, :]
matrix[:, 1]
matrix[0:2, 0:2]
Boolean indexing
arr[arr > 5]
arr[arr % 2 == 0]
조건이 True인 값만 자동으로 골라줍니다.
Array 연산 (operation)
a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
- element-wise: a + b, a * b
- scalar: a + 10, b * 2
- 비교: a > 2
모든 연산이 array 전체에 동시에 적용됩니다.
reshape, flatten, transpose, concatenate
reshape
arr.reshape(3, 4)
요소 개수는 반드시 같아야 합니다.
flatten
matrix.flatten()
자동 계산 (-1)
arr.reshape(2, -1)
transpose
matrix.T
concatenate / stack
np.vstack((A, B))
np.hstack((A, B))
np.concatenate((A, B), axis=0)
axis 개념 (가장 헷갈리는 부분)
- axis=0 → 세로 방향 (column 기준)
- axis=1 → 가로 방향 (row 기준)
np.sum(matrix, axis=0)
np.sum(matrix, axis=1)
3D에서도 동일한 원리로 작동합니다.
통계 연산
- np.sum, np.mean, np.median
- np.std, np.var
- np.min, np.max
- np.argmin, np.argmax
axis와 함께 쓰면 정말 강력해집니다.
Linear Algebra
np.dot(a, b)
np.linalg.det(matrix)
np.linalg.inv(matrix)
고급 수학 연산도 NumPy 안에서 처리 가능합니다.
Useful methods
- 정렬: np.sort, .sort()
- 중복 제거: np.unique
- 조건 검색: np.where
idx = np.where(arr > 5)
arr[idx]
Practical Example 1: Image 처리
이미지는 결국 숫자 배열입니다.
image = np.random.randint(0, 256, (10, 10))
밝기 조절
np.clip(image + 50, 0, 255)
대비 조절
np.clip(image * 1.5, 0, 255)
Practical Example 2: 성적 데이터 분석
scores = np.array([
[85, 90, 88],
[92, 87, 91],
[78, 85, 80],
[95, 98, 96],
[88, 92, 90]
])
- 학생별 평균: axis=1
- 시험별 평균: axis=0
- 최고 점수 학생: argmax
- 90점 초과 학생 찾기: boolean + np.where
마무리 한마디
NumPy의 핵심은 결국 이겁니다.
- array 구조 이해
- shape / axis 감각 잡기
- loop 대신 vectorization
axis 개념만 손에 익으면, NumPy는 갑자기 ‘어렵다’에서 ‘시원하다’로 바뀝니다.
처음엔 헷갈려도 괜찮아요. 다 그렇게 시작합니다.
'SW > Python' 카테고리의 다른 글
| Matplotlib 사용법 완전 정리: 설치부터 그래프 그리기까지 한 번에 배우기 (0) | 2026.02.20 |
|---|---|
| FastAPI로 CRUD API 만드는 방법: Issue Tracker 예제로 배우는 실전 FastAPI 입문 (0) | 2026.02.07 |
| FastAPI + React + Clerk로 B2B SaaS 애플리케이션 구축하기 (2025 SEO 최적화 가이드) (0) | 2026.01.31 |
| Python Requests로 API 호출하는 방법 한 번에 정리하기 (GET·POST·인증까지) (0) | 2026.01.27 |
| Python AI Agent를 FastAPI + Vercel로 배포하는 방법 (LangChain · LangGraph 실전 예제) (0) | 2026.01.03 |