x = [1,7,2]
x = np.array([1,7,2])
세로 : 열
가로 : 행 벡터
벡터는 보통 numpy 의 array로 표현한다.
=> 행 벡터의 차원
=> 벡터는 원점으로부터 상대적 위치를 표현한다.
벡터끼리 같은 모양을 가지면 덧셈, 뺄셈을 계산할 수 있다.
=> 다른 모양인 벡터끼리의 연산은 에러가 난다.
벡터끼리 같은 모양을 가지면 성분곱을 계산할 수 있다.
(Hadamard product)
x = np.array([1,7,2])
y = np.array([5,2,1])
x+y
#array([6,9,3])
x*y
#array([5,14,2])
x-y
#array([-4,5,1])
기존 벡터 x: x+0
두 벡터의 덧셈: x+y : (0,0) -> y -> y+x
원점을 y로 옮김
뺄셈도 마찬가지이다!
-x를 더한다고 생각하면 똑같음
norm = 노름
: 원점에서부터의 거리
def l1_norm(x):
x_norm = np.abs(x)#절댓값
x_norm = np.sum(x_norm)
return x_norm
def l2_norm(x):
x_norm = x*x
x_norm = np.sum(x_norm)
x_norm = np.sqrt(x_norm)#제곱근
return x_norm
두 벡터 사이의 거리를 계산할 때는 벡터의 뺄셈을 이용한다.
||y-x|| = ||x-y||
:L2 norm만 가능하다!
여기서 분자에 있는 식을 계산할 때 사용하는 방법이 내적!
내적: 두 벡터의 연산의 성분곱을 취한 후에, 성분곱을 취한 벡터들의 성분을 모두 더해주는 연산
inner product
=> np.inner 을 이용!
def angle(x,y):
v = np.inner(x,y)/(l2_norm(x) * l2_norm(y))
theta = np.arccos(v)
return theta
내적은 정사영(orthogonal projection)된 벡터의 길이와 관련있다.
Proj(x)는 벡터y로 정사영된 벡터 x의 그림자를 의미한다.
Proj(x)의 길이는 코사인법칙에 의해 ||x|| cosθ가 된다.
내적은 정사영의 길이를 벡터 y의 길이 ||y||만큼 조정한 값이다.
-> 내적은 두 벡터의 유사도를 측정하는데 사용 가능하다.