본문 바로가기
카테고리 없음

파이썬) Numpy

by 거북이8534 2024. 7. 23.

NumPy(넘파이) 특징

  • 과학 계산을 위한 라이브러리
  • 행렬/배열 처리 및 연산
  • 난수생성

배열의 생성

리스트에서 행렬/배열 생성

import numpy as np
a = [[1,2,3], [4,5,6]]
b = np.array(a)
print(b)          # [[1 2 3] [4 5 6]]
print(b.ndim)     # 2
print(b.shape)    # (2, 3)
print(b[0,0])     # 1

 

특수한 배열의 생성

print(np.arange(10))            # [0 1 2 3 4 5 6 7 8 9]
print(np.arange(5, 10))         # [5 6 7 8 9]
print(np.zeros((2,2)))          # [[0. 0.] [0. 0.]]
print(np.ones((2,3)))           # [[1. 1. 1.] [1. 1. 1.]]
print(np.full((2,3), 5))        # [[5 5 5] [5 5 5]]
print(np.eye(3))                # [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]

 

배열의 차원 변환

a = np.arange(20)
b = a.reshape((4, 5))
print(b)  # [[ 0  1  2  3  4] [ 5  6  7  8  9] [10 11 12 13 14] [15 16 17 18 19]]

Numpy 슬라이싱/인덱싱

lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr = np.array(lst)

a = arr[0:2, 0:2]
print(a)  # [[1 2] [4 5]]

a = arr[1:, 1:]
print(a)  # [[5 6] [8 9]]

Numpy 연산

배열간 연산

a = np.array([1,2,3])
b = np.array([4,5,6])

c = a + b
print(c)  # [5 7 9]

c = np.multiply(a, b)
print(c)  # [4 10 18]

c = np.divide(a, b)
print(c)  # [0.25 0.4 0.5]

 

dot() 함수: 행렬의 곱

arr1 = [[1,2],[3,4]]
arr2 = [[5,6],[7,8]]
a = np.array(arr1)
b = np.array(arr2)

c = np.dot(a, b)
print(c)  # [[19 22] [43 50]]
모든 원소의 합: sum(), 모든 원소의 곱: prod()
a = np.array([[-1,2,3],[3,4,8]])

print('sum=', a.sum())           # sum= 19
print('sum by row=', a.sum(axis=0))  # sum by row= [ 2  6 11]
print('mean=', a.mean())         # mean= 3.1666666666666665
print('sd=', a.std())            # sd= 2.6718699236469
print('product=', a.prod())      # product= -576

기본 수학함수

  • abs, fabs: 절대값
  • sqrt: 제곱근
  • square: 제곱
  • exp: 지수 함수
  • log, log10, log2, log1p: 로그 함수
  • sign: 부호 함수
  • ceil: 올림
  • floor: 내림
  • rint: 반올림
  • isnan: NaN 체크
  • isfinite, isinf: 유한/무한 체크
  • 삼각함수: cos, cosh, sin, sinh, tan, tanh
  • 역삼각함수: arccos, arccosh, arcsin, arcsinh, arctan, arctanh

선형대수(벡터/행렬연산) 함수

  • diag: 대각선 원소 추출
  • dot: 행렬 곱
  • trace: 대각선 합
  • det: 행렬식
  • eig: 고유값과 고유벡터
  • inv: 역행렬
  • pinv: 의사역행렬
  • qr: QR 분해
  • svd: 특이값 분해 (SVD)
  • solve: 선형방정식 Ax = b 해 구하기
  • lstsq: 최소제곱해

벡터연산(내적)

x = np.array([1, 2, 3])
y = np.array([6, 23, -1])
print(x.dot(y.T))  # 49

x = np.array([[1., 2., 3.], [4., 5., 6.]])
y = np.array([[6., 23.], [-1, 7], [8, 9]])
print(x.dot(y))  # [[ 28.  64.] [ 67. 181.]]
print(y.dot(x))  # [[ 98. 127. 156.] [ 27.  33.  39.] [ 44.  61.  78.]]

 

역행렬

from numpy.linalg import inv
np.random.seed()
X = np.array([[1,2,3],[1,0,0],[0,0,1]])
Y = inv(X)
print(Y)  # [[ 0.   1.   0. ] [ 0.5 -0.5 -1.5] [ 0.   0.   1. ]]
print(X.dot(Y))  # [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]

 

4.7 난수(랜덤넘버)의 생성

균등분포에서 난수생성

from numpy.linalg import inv
np.random.seed()
X = np.array([[1,2,3],[1,0,0],[0,0,1]])
Y = inv(X)
print(Y)  # [[ 0.   1.   0. ] [ 0.5 -0.5 -1.5] [ 0.   0.   1. ]]
print(X.dot(Y))  # [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]

정규분포

from numpy.linalg import inv
np.random.seed()
X = np.array([[1,2,3],[1,0,0],[0,0,1]])
Y = inv(X)
print(Y)  # [[ 0.   1.   0. ] [ 0.5 -0.5 -1.5] [ 0.   0.   1. ]]
print(X.dot(Y))  # [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]