1. NumPy (넘파이) : (숫자 배열의 효율적 이용)
ㅇ 숫자 배열의 효율적 사용을 위한 라이브러리로써, 고속 연산이 가능
2. 넘파이 기능
ㅇ 벡터, 배열, 행렬 등의 생성 및 연산
ㅇ 난수 생성 (np.random)
ㅇ 선형 대수 (np.linalg)
ㅇ 푸리에 변환 (np.fft)
ㅇ 브로드캐스팅, 벡터화 연산 지원
3. 넘파이 자료형
ㅇ 기본 컨테이너 객체 : ndarray
ㅇ 객체 요소 자료형 : dtype
- (int, float, complex, bool, string, datetime 등 다양한 세부형)
. 例) numpy.zeros(30,dtype=np.uint8)
.. 8 비트 부호 없는 정수 (unsigned 8-bit integer)로써, (0 ~ 255)
.. 모두 0으로 채워진 30 크기의 1차원 배열을 만듬
4. 넘파이 특징
ㅇ 파이썬 기본 리스트에 비해 메모리 효율성과 연산 속도가 매우 높음
ㅇ 벡터화 연산(Vectorized operation) 지원 → 반복문 없이 전체 연산
ㅇ 브로드캐스팅(Broadcasting) 지원 → 크기가 다른 배열 간에도 연산 가능
ㅇ 대규모 과학/공학 계산, 데이터 분석, 머신러닝 라이브러리(Pandas, TensorFlow 등) 의 기반
5. 넘파이 사용 例)
ㅇ 넘파이 라이브러리 가져옴
- 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]]
ㅇ 불리언 인덱싱 (Boolean Indexing)
- a = np.array([10, 20, 30, 40, 50])
- mask = a > 25 # [False False True True True]
- a[mask] # [30 40 50]
- a[a <= 30] # [10 20 30]