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
- 일반적으로 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
- 정의에 따라 기하학적 성질이 달라짐
- 두 벡터 사이의 거리를 계산: ∥x−y∥
- L2 norm을 이용해 두 벡터 사이 각도를 구할 수 있다: 제2 코사인 법칙
내적
- 한 벡터의 정사영 길이를 다른 벡터의 크기 만큼 조정한 값
- 두 벡터의 유사도(similarity)를 측정하는 데 사용 가능
np.inner(x, y)
Math #2: Matrix
행렬은 무엇일까?
- 벡터를 원소로 가지는 2차원 배열
- 벡터가 공간에서 한 점을 의미한다면, 행렬은 여러 점들을 나타냄
행렬의 내적
- 수학에서: tr(XYT)
np.inner
: i번째 행벡터와 j번째 행벡터 사이의 내적을 성분으로 가지는 행렬
행렬은 벡터공간에서 사용되는 연산자
- 행렬곱을 통해 한 벡터를 다른 차원의 공간으로 보낼 수 있다! -> 패턴 추출, 데이터 압축
역행렬
np.linalg.inv
- 역행렬을 구할 수 없을 때: Moore-Penrose pseudoinverse ->
np.linalg.pinv
A+=(ATA)−1AT (n≥m 일 때)A+=AT(ATA)−1 (n≥m 일 때)
Labs
- Lab1: 연립방정식 풀기
- Lab2: 선형회귀분석
- n≥m
- Xβ+α=y에서 계수 β를 찾기
sklearn
의 LinearRegression
과 같은 결과를 얻을 수 있다.
퀴즈
문제의 난이도는 높지는 않았다. 다만 numpy로 구현 연습을 했을 때 한 번에 되지 않는 것이 생각보다 많았다. 연습을 좀 더 해야겠다.
피어 세션
강의, 과제, 퀴즈 리뷰
isfinite()
의 정확한 의미
- numpy manual을 보면,
np.inf
뿐만 아니라 np.nan
도 False
가 된다. ⇒ 값이 정해지지 않는 모든 경우에 적용할 수 있지 않을까?
- 경사하강법에서 (특히 너무 큰 learning rate에 대해서) 발산하는 경우, 이런 경우에 적용할 수 있지 않을까?
Python 리스트가 큰 행렬을 처리하기 어려운 이유는?
- 단순히 연산 속도 차이 때문? 그렇다면 메모리를 할당하여 처리하는 numpy에서 공간복잡도는 문제가 되지 않나?
- 질문 게시판에 질문하기
정보 공유
3Blue1Brown
Full Stack Deep Learning
책 추천
이야기
OpenCV는 어디 쓰는 것인가?
- 이미지 추출, 저장하는 라이브러리
- 딥러닝과 별개로 컴퓨터 비전 분야에서 사용해 오던 라이브러리
이번주에 집중해서 공부하고 싶은 분야 발표