
NumPy란?
- Numerical Python의 줄임말
- 수치 계산을 빠르게 처리하는 파이썬 라이브러리
- 배열이나 행렬 계산에 필요한 함수 제공
- 수열 데이터를 다룰 때 용이
- 다치원 배열(Array)를 다룰때 주로 사용(인공신경망, 비정형 데이터 처리, 자연어 처리등)
왜 쓰일까?
| 기능 | 설명 |
| 💨 빠른 계산 | 리스트보다 훨씬 빠름 – 내부적으로 C로 구현됨 |
| 📏 다차원 배열 지원 | 1차원~n차원 배열까지 쉽게 다룸 |
| 📊 수학 함수 | 평균, 표준편차, 행렬곱, 통계 등 계산 용이 |
| 🧮 선형대수 | 벡터, 행렬 계산 필수 도구 |
| 🤝 pandas와 연동 | pandas의 데이터 구조도 numpy 배열 기반임 |
언제 쓰지?
- 수학 계산, 벡터/행렬 연산이 필요한 딥러닝, 통계, 데이터 분석
- pandas, sklearn, tensorflow, matplotlib 등 거의 모든 과학/AI 라이브러리가 numpy 기반
핵심 개념 : ndarray
NumPy의 핵심 객체는 ndarray (N-dimensional array)
"N차원 배열"이라고 생각 하자.
자주 쓰는 속성
| 속성 | 설명 | 예시 |
| .ndim | 차원 수 | a.ndim → 2 |
| .shape | 배열 모양 (행, 열) | a.shape → (2, 3) |
| .size | 전체 원소 개수 | a.size → 6 |
| .dtype | 데이터 타입 | a.dtype → int64 등 |
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6]])
print(a.ndim) # 차원 수: 2
print(a.shape) # 모양: (2, 3) (2행 3열)
print(a.size) # 전체 원소 수: 6
print(a.dtype) # 데이터 타입: int64 (또는 시스템에 따라 int32)
NumPy 주요 함수 전체 정리
✅ 1. 배열 생성
| 함수 | 설명 | 예시 |
| np.array() | 파이썬 리스트를 배열로 변환 | np.array([1, 2, 3]) |
| np.arange() | 범위 기반 배열 생성 | np.arange(1, 10) |
| np.linspace() | 균등 간격 수 생성 | np.linspace(1, 10, 10) |
| np.zeros() | 0으로 채운 배열 생성 | np.zeros((3, 4)) |
| np.ones() | 1로 채운 배열 생성 | np.ones(5) |
| np.full() | 지정한 값으로 채운 배열 생성 | np.full((2, 2), 7) |
| np.eye() | 단위 행렬 생성 | np.eye(5) |
| np.random.rand() | 0~1 균일 분포 난수 생성 | np.random.rand(2, 3) |
| np.random.randint() | 정수 난수 배열 생성 | np.random.randint(10, size=(3, 4)) |
✅ 2. 배열 정보 확인
| 속성 | 설명 | 예시 |
| .ndim | 차원 수 | a.ndim → 2 |
| .shape | 배열 모양 (행, 열) | a.shape → (2, 3) |
| .size | 전체 원소 수 | a.size |
| .dtype | 데이터 타입 | a.dtype |
| .itemsize | 원소 하나의 바이트 크기 | a.itemsize |
✅ 3. 배열 인덱싱 & 슬라이싱
| 구문 | 설명 | 예시 |
| a[i] | 1차원 요소 접근 | a[0] |
| a[i, j] | 2차원 요소 접근 | a[1, 2] |
| a[:, j] | 열 슬라이싱 | a[:, 1] |
| a[i, :] | 행 슬라이싱 | a[0, :] |
| a[::2] | 간격 슬라이싱 | a[::2] |
✅ 4. 배열 연산
| 함수/연산 | 설명 | 예시 |
| +, -, *, / | 요소별 사칙연산 | a * 2, a + b |
| np.dot() | 행렬 곱 | np.dot(a, b) |
| .T | 전치 (transpose) | a.T |
| np.transpose() | 전치 (함수형) | np.transpose(a) |
| np.reshape() | 배열 모양 변경 | a.reshape(3, 2) |
✅ 5. 통계/집계 함수
| 함수 | 설명 | 예시 |
| np.sum() | 합계 | np.sum(a) |
| np.mean() | 평균 | np.mean(a) |
| np.std() | 표준편차 | np.std(a) |
| np.var() | 분산 | np.var(a) |
| np.min() / np.max() | 최소/최대값 | np.min(a), np.max(a) |
| np.argmin() / np.argmax() | 최소/최대 인덱스 | np.argmax(a) |
| np.argsort() | 정렬 인덱스 반환 | np.argsort(a) |
✅ 6. 논리 연산 & 조건
| 함수/연산 | 설명 | 예시 |
| a > 5 | 조건 필터링 | a[a > 5] |
| np.where() | 조건에 따라 선택 | np.where(a > 15, '15초과', '15 이하') |
| np.any() | 하나라도 True | np.any(a > 10) |
| np.all() | 모두 True | np.all(a < 100) |
✅ 7. 배열 복사 & 병합
| 함수 | 설명 | 예시 |
| a.copy() | 배열 복사 | b = a.copy() |
| np.concatenate() | 배열 이어붙이기 | np.concatenate([a, b], axis=0) |
| np.vstack() | 수직 방향 연결 | np.vstack((a, b)) |
| np.hstack() | 수평 방향 연결 | np.hstack((a, b)) |
| np.split() | 배열 분할 | np.split(a, 2) |
✅ 8. 선형대수
| 함수 | 설명 | 예시 |
| np.linalg.inv() | 역행렬 계산 | np.linalg.inv(A) |
| np.linalg.det() | 행렬식(Determinant) 계산 | np.linalg.det(A) |
✅ 9. 난수 생성 및 셔플
| 함수 | 설명 | 예시 |
| np.random.rand() | 0~1 균일 분포 | np.random.rand(2, 3) |
| np.random.randint() | 정수 난수 생성 | np.random.randint(1, 10, size=(2, 2)) |
| np.random.shuffle() | 배열 섞기 (1차 축 기준) | np.random.shuffle(a) |
✅ 10. 기타 자주 쓰는 함수
| 함수 | 설명 | 예시 |
| np.unique() | 고유값 추출 | np.unique(a) |
| np.sort() | 정렬 | np.sort(a) |
| np.argsort() | 정렬 후 인덱스 반환 | np.argsort(a) |
| np.isnan() | NaN 여부 확인 | np.isnan(a) |
| np.clip() | 값 제한 (자르기) | np.clip(a, 0, 1) |
| np.round() | 반올림 | np.round(a, 2) |
| tolist() | 배열을 파이썬 리스트로 변환 | a.tolist() |
브로드캐스트

1. 브로드캐스팅이란?
서로 다른 모양(Shape)의 배열끼리 연산시,
NumPy가 자동으로 크기를 확장해서 연산이 가능하도록 해주는 기능.
import numpy as np
a = np.array([1, 2, 3])
b = 10
a + b
# 결과: array([11, 12, 13])
파이썬 list라면 불가능한 연산인데, b = 10을 [10, 10, 10]으로 자동 확장해서 연산했기 때문에 NumPy는 된다.
2. 브로드캐스팅의 규칙
| 조건 | 의미 |
| 두 축의 크기가 같다 | ✅ 연산 가능 |
| 한쪽이 1이다 | ✅ 해당 축이 반복(broadcast)됨 |
| 그 외 | ❌ 오류 발생 |
3. 브로드캐스팅 장점
| 항목 | 내용 |
| 코드 간결성 | for문 없이 전체 연산 가능 |
| 속도 향상 | 내부적으로 C 언어로 최적화 |
| 벡터화 지원 | 머신러닝/딥러닝에 최적화 |
4. 시각화 요약
| A Shape | B Shape | 가능? | 최종 Shape |
| (3, 1) | (1, 4) | ✅ | (3, 4) |
| (2, 3) | (3,) | ✅ | (2, 3) |
| (2, 3) | (3, 1) | ❌ | 오류 |
| (2, 3) | (2, 1) | ✅ | (2, 3) |
※ (2,3) (3,1) 이 오류가 발생 하는 이유
| 차원 순서 | A 차원 | B 차원 | 결과 |
| 마지막 차원 (열) | 3 | 1 | ✅ OK → 1이므로 확장 가능 |
| 첫 번째 차원 (행) | 2 | 3 | ❌ 다르고, 둘 다 ≠ 1 → 불일치 |
A (2, 3)
[[1, 2, 3],
[4, 5, 6]]
B (3, 1)
[[10],
[20],
[30]]
- (2,3) vs (3,1)은 **행 방향(첫 번째 차원)**에서 크기가 달라도 둘 다 1이 아니므로 브로드캐스팅 불가.
- NumPy는 자동 복사할 수 있는 경우만 허용하지, 억지로 늘리지 않음
'딥러닝 > 라이브러리' 카테고리의 다른 글
| 딥러닝 라이브러리 종류 (0) | 2025.07.09 |
|---|---|
| [라이브러리] Numpy VS PANDAS (4) | 2025.07.09 |
| [라이브러리]Pandas (6) | 2025.07.09 |