1. NumPy (넘파이) : (숫자 배열의 효율적 이용)
ㅇ 숫자 배열의 효율적 사용을 위한 라이브러리로써, 고속 연산이 가능
ㅇ (기능)
- 벡터, 배열, 행렬 등의 생성 및 연산
- 난수 생성 (np.random)
- 선형 대수 (np.linalg)
- 푸리에 변환 (np.fft)
- 브로드캐스팅, 벡터화 연산 지원
ㅇ (자료형)
- 기본 컨테이너 객체 : ndarray
- 객체 요소 자료형 : dtype
. (int, float, complex, bool, string, datetime 등 다양한 세부형)
ㅇ (특징)
- 파이썬 기본 리스트에 비해 메모리 효율성과 연산 속도가 매우 높음
- 벡터화 연산(Vectorized operation) 지원 → 반복문 없이 전체 연산
- 브로드캐스팅(Broadcasting) 지원 → 크기가 다른 배열 간에도 연산 가능
- 대규모 과학/공학 계산, 데이터 분석, 머신러닝 라이브러리(Pandas, TensorFlow 등) 의 기반
ㅇ 例)
- 넘파이 라이브러리 가져옴
. import numpy as np
- 배열 생성
. x = np.array([1,2,3])
. y = np.array([4,5,6])
. z = x + y # [5 7 9] (3 요소 벡터)
- 배열 접근
. z[0] # 5
. z[0] = 10 # [10 7 9]
- 복사와 참조
. a = np.array([1, 2, 3])
. b = a # 참조 복사 (주소 공유)
. c = a.copy() # 내용 복사 (독립 객체)
. a[0] = 99
. b # [99 2 3]
. c # [1 2 3]
- 벡터 속성
. vec = np.array([1, 2, 3, 4])
. vec.mean() # 2.5
. vec.shape # (4,) (벡터 모양)
. vec.size # 4 (벡터 사이즈)
. vec.ndim # 1 (차원 수)
- 행렬 속성
. matrix = np.array([[1, 2, 3], [4, 5, 6]]) # 2×3 행렬
. matrix.shape # (2, 3)
. matrix[0, 1] # 2
. matrix[:, 1] # [2 5] (두 번째 열)
. matrix.T # 전치행렬 [[1 4] [2 5] [3 6]]
- 연속된 값 생성
. np.arange(0, 10, 2) # [0 2 4 6 8]
. np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1. ]
. np.zeros((2, 3)) # [[0. 0. 0.] [0. 0. 0.]]
. np.ones((2, 2)) # [[1. 1.] [1. 1.]]
. np.eye(3) # 단위행렬 (3×3)
- 브로드캐스팅 (Broadcasting)
. A = np.array([[1, 2, 3], [4, 5, 6]])
. b = np.array([10, 20, 30])
. A + b # [[11 22 33] [14 25 36]]
- 조건 및 논리 연산
. a = np.array([1, 2, 3, 4, 5])
. a[a > 2] # [3 4 5]
. np.where(a % 2 == 0, '짝수', '홀수') # ['홀수' '짝수' '홀수' '짝수' '홀수']
- 수학/통계 함수
. data = np.array([1, 2, 3, 4, 5])
. np.mean(data) # 3.0
. np.std(data) # 표준편차 1.414...
. np.sum(data) # 15
. np.max(data), np.min(data) # (5, 1)
. np.median(data) # 3.0
- 선형대수 연산 (np.linalg)
. A = np.array([[1, 2], [3, 4]])
. b = np.array([5, 6])
. np.dot(A, b) # 행렬-벡터 곱 [17 39]
. np.linalg.inv(A) # 역행렬 [[-2. 1. ] [1.5 -0.5]]
. np.linalg.det(A) # 행렬식 (-2.0)
. np.linalg.eig(A) # 고유값 및 고유벡터
- 난수 생성 (np.random)
. np.random.rand(2, 3) # 0~1 사이 균등분포
. np.random.randn(3) # 표준정규분포 (평균0, 표준편차1)
. np.random.randint(0, 10, 5) # 0~9 정수 5개
- 고급 응용 (Reshape, Stack, Flatten 등)
. a = np.arange(6) # [0 1 2 3 4 5]
. a.reshape(2, 3) # [[0 1 2] [3 4 5]]
. a.flatten() # [0 1 2 3 4 5]
. np.hstack((x, y)) # [1 2 3 4 5 6]
. np.vstack((x, y)) # [[1 2 3] [4 5 6]]