Vector (벡터)란?
# Vector
컴퓨터에서는 list나 array로 표현함.
공간에서는 "한 점"을 의미.
원점을 생각해보면,
- 1D (수직선) 위에서는, 0
- 2D (좌표평면) 에서는, [0,0]
- 3D (3차원 공간) 에서는, [0,0,0]
- n차원 공간에서는, [0,0,...,0] 인거임.
그래서 원점을 기준으로 x라는 위치를 나타낸 것이 Vector를 의미함.
이는 원점에 대한 위치라 상대적 위치라고 할 수 있음.
- 스칼라곱 : 크기를 곱하면, 그 벡터의 길이가 바뀜.
- 성분곱 : 같은 모양이면 가능. 성분(원소)끼리의 곱을 말함.
- 같은 모양(차원, 개수)에서 +/- 연산 가능. (상대적 위치 이동)
X = [[1,2,3],[4,5,6],[7,8,9]]
# 스칼라곱
3 * X
# 성분곱
[1,7,2] * [5,2,1] = [5,14,2]
노름 norm
(임의의 n차원에서의) 원점에서 부터의 거리
- L1-norm : 각 성분의 변화량의 절대값의 합
- L2-norm : 피타고라스 정리로 유클리드 거리 계산한 것
위 2가지 거리 계산 방법은 기하학적 성질이 달라, 다르게 쓰임
두 Vector 사이의 거리 : Vector의 뺄셈을 이용하면 됨.
y-x = ||y-x|| = ||x-y||
위 연산은 L1-norm/L2-norm 선택하여 계산할 수 있음.
두 Vector 사이의 각도 : (임의의 n차원에서의) (L2노름에서만 연산 가능)
유클리드로 두 Vector 사이의 거리를 계산 가능하다면, 제2코사인 법칙에 의해 두 Vector 사이의 각도도 계산이 가능함.
자세하게 보면, 내적 연산은 두 벡터 원소들의 성분곱의 합으로 계산할 수 있음.
이 내적은 정사영과 관련이 있는데, 정사영한 값에서 스칼라만큼의 값을 조정한 것이 내적값임.
# Matrix
성분곱과 행렬곱셈은 다른 것임.
성분곱은 말 그대로 성분끼리 곱하는 것이고,
행렬곱셈은 i번째 행벡터와 j번째 열벡터를 곱하는 것임.
numpy에서 inner 함수에 X, Y를 인수로 주어 연산하는 것은
X, Y^T 에 대해 행렬곱셈한 값을 말함.
이러한 내적연산은 주어진 데이터의 패턴을 추출하거나, 데이터를 압축하기 위해 사용.
X = np.array([[1,2,3],[4,5,6]]) # 2*3
y = np.array([1,3]) # 2*1
# 내적 연산
np.dot(X, y) # 방법 1
np.inner(X, y) # 방법 2