데이터 분석 • 챕터 1 / 4
NumPy는 Python의 대표적인 수치연산 라이브러리 입니다.
| 특징 | 설명 |
|---|---|
| 고성능 연산 | C 언어로 구현된 함수를 통해 벡터·행렬·텐서 연산을 빠르게 수행 |
| AI 필수 도구 | LLM, AI 분야에서 필수적으로 사용 |
| 광범위한 활용 | 거의 모든 ML/DL 라이브러리가 NumPy 기반 |
왜 NumPy인가?
파이썬의 기본 기능으로 연산 시 속도가 느리지만, NumPy는 C 언어로 구현되어 있어 대규모 데이터 연산에서 월등한 성능을 보입니다.
import numpy as np
# 1. 직접 배열 만들기
arr = np.array([1, 2, 3, 4, 5])
# 2. 영(0)행렬 만들기
zeros = np.zeros((3, 4)) # 3x4 영행렬
# 3. 일(1)행렬 만들기
ones = np.ones((2, 3)) # 2x3 일행렬
# 4. 범위 배열 만들기
range_arr = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
# 5. 정규분포 난수 배열
random_arr = np.random.randn(3, 3) # 3x3 정규분포 난수| 함수 | 설명 | 예시 |
|---|---|---|
np.array(리스트) | 직접 배열 생성 | np.array([1,2,3]) |
np.zeros((m,n)) | m×n 영행렬 | np.zeros((3,4)) |
np.ones((m,n)) | m×n 일행렬 | np.ones((2,3)) |
np.arange(start, stop, step) | 범위 배열 | np.arange(0, 10, 2) |
np.random.randn(m,n) | 정규분포 난수 | np.random.randn(3,3) |
v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])
# 요소별 연산
print(v1 + v2) # [5, 7, 9]
print(v1 - v2) # [-3, -3, -3]
print(v1 * v2) # [4, 10, 18]
print(v1 / v2) # [0.25, 0.4, 0.5]벡터의 방향 유사도 측정 에 활용됩니다.
v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])
# 내적 계산
dot_product = np.dot(v1, v2)
print(dot_product) # 32 (1*4 + 2*5 + 3*6)벡터의 크기(거리) 를 계산합니다.
v1 = np.array([1, 2, 3])
# L2 노름 (유클리드 거리)
norm = np.linalg.norm(v1)
print(norm) # 3.7416... (√(1² + 2² + 3²))벡터 연산의 활용
내적과 노름은 임베딩 벡터 간의 유사도를 계산하는 데 핵심적으로 사용됩니다. RAG 시스템에서 문서 검색 시 코사인 유사도 계산에 활용됩니다.
행렬은 데이터와 가중치를 표현하는 가장 일반적인 형식 입니다.
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])# 행렬 곱 방법 1: np.matmul
result1 = np.matmul(A, B)
# 행렬 곱 방법 2: @ 연산자 (권장)
result2 = A @ B
print(result2)
# [[19 22]
# [43 50]]A = np.array([[1, 2],
[3, 4]])
# 전치 행렬
print(A.T)
# [[1 3]
# [2 4]]| 연산 | 방법 | 설명 |
|---|---|---|
| 행렬 곱 | A @ B 또는 np.matmul(A, B) | 행렬 간 곱셈 |
| 전치 | A.T | 행과 열을 바꿈 |
| 역행렬 | np.linalg.inv(A) | 역행렬 계산 |
| 행렬식 | np.linalg.det(A) | 행렬식 계산 |
import numpy as np
# 벡터 생성
v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])
# 내적 계산
dot = np.dot(v1, v2)
print(f"내적: {dot}") # 32
# 노름 계산
norm_v1 = np.linalg.norm(v1)
print(f"v1 노름: {norm_v1:.4f}") # 3.7417
# 행렬 생성 및 연산
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# 행렬 곱
C = A @ B
print(f"행렬 곱:\n{C}")
# 전치 행렬
print(f"A의 전치:\n{A.T}")| 개념 | 핵심 내용 |
|---|---|
| NumPy | Python 수치연산 라이브러리, AI/ML 필수 |
| 배열 생성 | np.array, np.zeros, np.ones, np.arange |
| 벡터 연산 | 요소별 연산, 내적(np.dot), 노름(np.linalg.norm) |
| 행렬 연산 | 행렬 곱(@), 전치(.T) |
| 활용 | 임베딩, 유사도 계산, 딥러닝 연산 |