Day 6

지원·2021년 1월 25일
0

Lecture Note

Math #0: Numpy Basic

No dynamic typing

  • 하나의 numpy array에는 하나의 data type만 가능
  • C의 data type과 compatible

Handling shape

  • reshape: shape 크기 변경, element 개수 동일
  • flatten: 다차원 array를 1차원 array로 변환

Indexing & slicing

  • indexing: A[i][j] == A[i, j]
  • slicing: A[1] != A[1:2], A[::2]

Creation functions

  • arange: np.arange(0, 30, 0.5).reshape(2, 5, 6)
  • zeros
  • ones
  • empty: without initialization
  • zeros_like
  • ones_like
  • empty_like
  • identity: 단위 행렬 생성
  • eye: 대각 성분이 1인 행렬 생성 -- 시작과 끝 설정 가능
  • diag: 대각 행렬의 값 추출 -- k(시작 위치) 지정 가능
  • random sampling: np.random

Operation functions

  • statistical functions: sum, std, mean
  • mathematical functions
  • concatenate
    • vstack == concatenate(axis=0)
    • hstack == concatenate(axis=1)
    • np.newaxis와 함께 활용 가능

Array operations

  • 기본적인 사칙 연산: elementwise operation
  • dot product: dot
  • transpose: .T
  • broadcasting

Numpy performance

  • 일반적으로 for loop < list comprehension < numpy
  • 계산이 아닌 할당에서는 연산 속도의 이점이 없음

Comparisons

  • broadcasting & elementwise
  • all, any
  • logical_not, logical_or, logical_and
  • where: 조건에 맞는 값만 반환 or 조건 결과에 따른 결과값 지정
  • isnan, isinfinite
  • argmax, argmin, argsort

Boolin & fancy index

  • boolin index: test_array[condition]
  • fancy index: test_array[indices], test_index.take(indices), A[b, c]

Numpy data i/o

  • loadtxt, savetxt
  • numpy object -npy: pickle 객체

Math #1: Vector

벡터가 무엇일까?

  • 공간에서 한 점의 상대적 위치

Norms

  • L1 norm: sum of absolute differences of elements
  • L2 norm: Euclidian distance
  • 정의에 따라 기하학적 성질이 달라짐
  • 두 벡터 사이의 거리를 계산: xy\|x - y\|
  • L2 norm을 이용해 두 벡터 사이 각도를 구할 수 있다: 제2 코사인 법칙

내적

  • 한 벡터의 정사영 길이를 다른 벡터의 크기 만큼 조정한 값
  • 두 벡터의 유사도(similarity)를 측정하는 데 사용 가능
  • np.inner(x, y)

Math #2: Matrix

행렬은 무엇일까?

  • 벡터를 원소로 가지는 2차원 배열
  • 벡터가 공간에서 한 점을 의미한다면, 행렬은 여러 점들을 나타냄

행렬의 내적

  • 수학에서: tr(XYT)tr(XY^T)
  • np.inner: i번째 행벡터와 j번째 행벡터 사이의 내적을 성분으로 가지는 행렬

행렬은 벡터공간에서 사용되는 연산자

  • 행렬곱을 통해 한 벡터를 다른 차원의 공간으로 보낼 수 있다! -> 패턴 추출, 데이터 압축

역행렬

  • np.linalg.inv
  • 역행렬을 구할 수 없을 때: Moore-Penrose pseudoinverse -> np.linalg.pinv
    A+=(ATA)1AT  (nm 일 때)A+=AT(ATA)1  (nm 일 때)A^+=(A^TA)^{-1}A^T \space\space {\footnotesize (n \ge m \space 일 \space 때)} \\ A^+=A^T(A^TA)^{-1} \space\space {\footnotesize (n \ge m \space 일 \space 때)}

Labs

  • Lab1: 연립방정식 풀기
    • nmn \le m
  • Lab2: 선형회귀분석
    • nmn \ge m
    • Xβ+α=yX\beta + \alpha = y에서 계수 β\beta를 찾기
    • sklearnLinearRegression과 같은 결과를 얻을 수 있다.

퀴즈

문제의 난이도는 높지는 않았다. 다만 numpy로 구현 연습을 했을 때 한 번에 되지 않는 것이 생각보다 많았다. 연습을 좀 더 해야겠다.

피어 세션

강의, 과제, 퀴즈 리뷰

isfinite()의 정확한 의미

  • numpy manual을 보면, np.inf 뿐만 아니라 np.nanFalse가 된다. \Rightarrow 값이 정해지지 않는 모든 경우에 적용할 수 있지 않을까?
  • 경사하강법에서 (특히 너무 큰 learning rate에 대해서) 발산하는 경우, 이런 경우에 적용할 수 있지 않을까?

Python 리스트가 큰 행렬을 처리하기 어려운 이유는?

  • 단순히 연산 속도 차이 때문? 그렇다면 메모리를 할당하여 처리하는 numpy에서 공간복잡도는 문제가 되지 않나?
  • 질문 게시판에 질문하기

정보 공유

3Blue1Brown

  • 시각화해서 쉽게 설명

Full Stack Deep Learning

책 추천

이야기

OpenCV는 어디 쓰는 것인가?

  • 이미지 추출, 저장하는 라이브러리
  • 딥러닝과 별개로 컴퓨터 비전 분야에서 사용해 오던 라이브러리

이번주에 집중해서 공부하고 싶은 분야 발표

profile
섬마을 초보 개발자

0개의 댓글