벡터
숫자를 원소로 가지는 리스트 또는 배열로 $$x = \begin{bmatrix}1\\7\\2 \end{bmatrix}$$ 라는 벡터가 있을 때 이를 열벡터라고 하며
파이썬에서 이를 표현할 경우
x = [1, 7, 2]
x = np.array([1, 7, 2])
로 표현한다. 보통 넘파이 라이브러리를 통해 다루는 일이 많기 때문에 후자의 방식으로 표기한다.
벡터는 공간에서의 한 점을 나타내며 원점으로부터의 상대적 위치를 표현함
벡터에 스칼라(상수)를 곱하는 경우 길이가 변하며
두 벡터의 덧셈은 다른 벡터로부터의 상대적 위치이동을 표현, 뺼셈 역시도 같음
Norm
벡터의 노름은 원점에서부터의 거리를 말함.
\(L_1\) norm 과 \(L_2\) norm이 있으며
$$L_1 = ||x||_1 = \sum_i^d|x_i|$$
으로 \(L_1\) norm은 각 성분의 변화량의 절대값을 모두 더한다.
$$L_2 = ||x_2|| = \sqrt{\sum_i^d|x_i|^2} $$
으로 \(L_2\) norm은 피타고라스 정리를 통한 유클리드 거리를 계산한다.
\(d = \sqrt{(a_1 - b_1)^2 + (a_2 - b_2)^2}\)
의 d를 유클리드 거리라고 하며 이를 통해 \(L_2\) norm을 계산한다.
두 벡터 사이의 거리 구하기
\(L_1\) norm, \(L_2\) norm 을 통해 계산 가능하며 벡터의 뺄셈으로 구한다.
두 벡터 사이의 각 구하기
\(L_2\) norm 을 통해서만 구할 수 있으며, 제 2 코사인 법칙에 의해 계산한다.
위의 a, b 벡터 사의의 각을 구하기 위해선
\(cos\theta = \frac{||a||_2^2 + ||b||_2^2 - ||a - b||_2^2}{2||a||_2||b||_2}\) 의 제 2 코사인 법칙을 통해 구할 수 있다.
여기서 이 식은
\(cos\theta = \frac{<a,b>}{||a||_2||b||_2}\) 로 변경될 수 있으며 <a,b>를 a,b 벡터의 내적이라고 한다.
\(<a,b> = \sum_{i=1}^da_ib_i\)
벡터의 내적
내적은 정사영된 벡터의 길이와 관련 있으며
위 그림에서의 \(|a|cos\theta\)를 \(Proj(a)\)라고 하며 정사영 된 벡터의 길이라고 한다.
이 \(Proj(a)\)를 벡터 b의 길이 \(||b||\)만큼 조정한 값을 a,b의 내적이라고 한다.
행렬
- 벡터를 원소로 가지는 2차원 배열
- 행(row)과 열(column)이라는 인덱스를 가지며 행렬의 특정 행(열)을 고정하면 행(열)벡터라 부름
- 벡터가 공간에서 한 점을 의미한다면 행렬은 여러 점들을 나타낸다.
행렬의 곱셈
위 그림의 방식으로 곱셈이 이루어짐.
즉 행렬 곱셈은 i번째 행벡터와 j번째 열벡터 사이의 내적을 성분으로 가지는 행렬을 계산함.
행렬식
어떤 행렬 A의 연산을 거꾸로 되돌리는 행렬을 역행렬이라고 부르며 \(A^-1\)라 표기한다. 역행렬은 행과 열 숫자가 같으며 행렬식이 0이 아닌 경우에만 계산할 수 있다.
일반 행렬과 역행렬의 곱은 \(AA^{-1} = A^{-1}A = I\)의 식을 만족하며
만약 역행렬을 계산할 수 없는 상황에선 유사역행렬 또는 무어-펜로즈 역행렬 \(A^+\)를 사용한다.
\(n\geq m, A^+ = (A^TA)^{-1}A^T\)
\(n\leq m, A^+ = A^T(A^TA)^{-1}\)이며
n > m 일 경우 \(A^+A = I\)가 성립하며
n < m 일 경우 \(AA^+ = I\)만 성립한다.
파이썬을 통한 행렬의 계산
np.inner
를 통해 내적을 구할 수 있으며
행렬의 내적을 구할 경우에는 수학에서의 내적과 달리 i번째 행벡터와 j번째 행벡터 사이의 내적을 성분으로 가지는 행렬을 구함.
역행렬을 구할 수 있는 경우
np.linalg.inv
를 통한 역행렬 \(A^{-1}\)을 구하며
역행렬을 구할 수 없는 경우
np.linalg.pinv
를 통해 역행렬 \(A^+\)를 구한다.
'네이버 부스트캠프 학습 정리 > 1주차' 카테고리의 다른 글
1주차 회고 (1) | 2023.03.12 |
---|---|
[Python] arg/configparser (0) | 2023.03.11 |
[Python] OOP (0) | 2023.03.10 |
[Python] Pythonic Code (0) | 2023.03.10 |
[Python] Function (0) | 2023.03.10 |