Peer Session Badge

1. Numpy

  • Numpy (Numerical Python)
    • 파이썬의 고성능 과학 계산용 패키지
    • matrix, vector 등 array 연산의 표준
    • list에 비해 빠르고 메모리 효율적
    • 반복문 없이 배열 처리 지원
  • ndarray
    • np.array([1, 4, 5, 8], float)
    • ndarray 객체
    • 하나의 데이터 타입만 배열에 넣을 수 있음
    • dynamic typing not supported
    • scalar, vector, matrix, n-tensor
  • reshape
    • -1: size를 기반으로 알아서 개수 선정
    • np.flatten으로도 가능: 다차원 -> 1차원 array
  • indexing, slicing
    • array[0][2], array[0, 2]
    • array[:, 2:]
  • arange
    • np.arange(start, end, step)
    • python과 달리 float도 가능
  • eye
    • 대각선이 1인 행렬
    • 시작 index 설정 가능 (k=0일 때 np.identity와 같음)
  • diag
    • 대각성분 추출
    • 시작 index 설정 가능 (k=2)
  • random sampling
    • np.random.uniform()
    • np.random.normal()
    • np.random.exponential()
  • operation functions
    • .sum(), .mean(), .std()
    • axis: operation functions 실행 시 기준이 되는 dimention 축
    • (axis=0, axis=1, axis=2, …)
    • concatenate((a, b), axis=0)
    • vstack, hstack
    • newaxis (arr = arr[np.newaxis, :])
  • operations b/w arrays
    • element-wise (same shape)
    • dot product
    • broadcasting (different shape)
    • all & any
        a = np.arange(10)
        np.all(a < 4)
        # False
        np.any(a < 4)
        # True
              
        a < 4
        # return: boolean array
        # numpay array끼리 비교 시 역시 boolearn array를 return
      
  • np.where
    • np.where(condition, TRUE, FALSE)
    • np.where(condintion): index 값 반환
        np.where(a > 0, 3, 2)
        # array([3, 3, 2]) 처럼, True일 경우 3, False일 경우 2 return
        a = np.arange(10)
        np.where(a > 5)
        # array([6, 7, 8, 9],) 조건에 해당하는 인덱스 반환
      
  • argmax, argmin
    • array 내 최대(최소)값의 index 반환
        a = np.array([1, 2, 3, 5, 7, 30])
        np.argmax(a), np.argmin(a)
        # (5, 0)
        a = np.array([[1,2,4,7],[9,88,6,45],[9,76,3,4]])
        np.argmax(a, axis=1), np.argmin(a, axis=0)
        # (array([3, 1, 1]), array[0, 0, 2, 2])
      
  • fancy index
      a = np.array([2, 4, 6, 8], float)
      condition = np.array([0, 3, 1], int) # index 값이므로 반드시 int!
      a[condition]
      # array([2., 8., 4.])
      a.take(condition) # take 함수를 이용해 bracket index와 같은 결과 반환 가능
      # array([2., 8., 4.])
    



2. Vector

  • Vector
    • 숫자를 원소로 가지는 list 또는 array
    • 공간에서 한 점 (원점으로부터 상대적 위치) 표현
    • 스칼라곱 시 방향은 그대로, 길이만 변함
    • 두 벡터의 덧셈: 다른 벡터로부터 상대적 위치 이동
  • 벡터의 노름(norm)
    • 원점에서부터의 거리
  • L1 norm
    • $\Vert x \Vert_1 = \sum_{i=1}^{d}\Vert x_i \Vert$
    • 각 성분의 변화량의 절대값의 합
    • robust 학습, lasso 회귀
  • L2 norm
    • $\Vert x \Vert_2 = \sqrt{\sum_{i=1}^{d} \vert x_i \vert^2}$
    • 피타코갈스 정리를 이용해 유클리드 거리 계산
    • laplace 근사, ridge 회귀
  • 두 벡터 사이의 거리
    • $\Vert y - x \Vert = \Vert x - y \Vert$
  • 두 벡터 사이의 각도
    • $\Vert y - x \Vert _2 = \Vert x - y \Vert _2$
    • $cos\theta = \frac{ \Vert x \Vert _2^2 + \Vert y \Vert _2^2 - \Vert x - y \Vert _2^2}{2 \Vert x \Vert _2 \Vert y \Vert _2}$ (제 2 코사인법칙)
    • $cos\theta = \frac{<x, y>}{ \Vert x \Vert _2 \Vert y \Vert _2}$
    • $<x, y> = \sum_{i=1}^d{x_iy_i}$ (내적, inner product) np.inner()
  • 내적의 해석
    • 정사영(orthogonal projection)된 벡터의 길이와 관련이 있음
    • proj(x) = 벡터 y로 정사영된 벡터 x의 그림자 길이
    • $proj(x) = \Vert x \Vert cos\theta$
    • $<x, y> = \Vert x \Vert _2 \Vert y \Vert _2cos\theta$
    • 내적: 정사영의 길이를 \Vert y \Vert (벡터 y의 길이)만큼 조정한 값
    • 두 벡터의 유사도(similarity) 측정에 사용 가능

3. Matrix

  • matrix
    • vector를 원소로 가지는 2차원 배열
    • numpy에서는 row가 기본 단위 (행벡터가 기본)
    • \[\begin{bmatrix} X_1 \\ X_2 \\ \vdots \\ X_n \end{bmatrix}\]
    • (Xi: 행벡터 -> i 번째 데이터)
    • $X = (x_{ij})$
    • $X^T = (x_{ji})$
  • matrix multiplication
    • $XY = \Big(\sum_kx_{ik}y_{kj}\Big)$
    • X의 i번째 행벡터와, Y의 j번째 열벡터 사이의 내적을 성분으로 가지는 행렬 계산
    • X @ Y (numpy 에서는 @ 사용)
  • 두 행렬의 내적
    • $XY^T = \Big(\sum_kx_{ik}y_{jk}\Big)$
    • np.inner: i번째 행벡터와 j번째 행벡터 사이의 내적을 성분으로 가지는 행렬 계산
    • 수학에서 말하는 내적과 다르다. (수학에선 보통 $tr(XY^T)$를 내적으로 계산)
  • 행렬의 해석
    • 벡터공간에서 사용되는 연산자(operator)
    • 행렬곱을 통해 벡터를 다른 차원의 공간으로 보낼 수 있음
    • 행렬 A: m차원의 공간에 있는 X를, n차원의 공간에 있는 Z로 보내는 연산자
    • $Z = AX$
    • \[\begin{equation} \begin{bmatrix} z_1 \\ z_2 \\ \vdots \\ z_n \end{bmatrix} = \begin{bmatrix} a_{11} & a_{12} & \cdots && a_{1m} \\ a_{21} \\ \vdots \\ a_{n1} & & & & a_{nm} \end{bmatrix} \begin{bmatrix}x_1 \\ x_2 \\ \vdots \\ x_m \end{bmatrix} \end{equation}\]
  • inverse matrix
    • $A^{-1}$
    • 행과 열의 크기가 같고 det != 0 인 경우 계산 가능
    • np.linalg.inv()
  • pseudo-inverse (유사역행렬, Moore-Penrose inverse)
    • $A^+ = (A^TA)^{-1}A^T$ (when n >= m)
    • $A^+ = A^T(AA^T)^{-1}$ (when n >= m)
    • np.linalg.pinv()
    • 연립방정식 해 구할 때 이용 가능
    • linear regression equation 찾을 때 이용 가능 ($X\beta = \hat{y} \approx y$)