向x移动k次a个单位
再向y移动k次b个单位
$$ k \times \begin{pmatrix} v_1 \\ v_2 \\ ... \\ v_n \end{pmatrix} = \begin{pmatrix} k \cdot v_1 \\ k \cdot v_2 \\ ... \\ k \cdot v_n \end{pmatrix}$$单位向量的模永远等于1,单位向量的长度不重要,只表示方向,所以单位向量有无数个,以(0,0)为圆心,半径为1的一个圆。二维空间中,有两个特殊的单位向量 $\vec{e_1}=(1,0)$, $\vec{e_2}=(0,1)$。只由0,1组成的单位向量:标准单位向量 Standard Unit Vector
$$\begin{Vmatrix} \hat{u} \end{Vmatrix} = 1 $$$$ = sum(\begin{pmatrix} u_1 \cdot v_1 \\ u_2 \cdot v_2 \\ ... \\ u_n \cdot v_n \end{pmatrix})$$ $$ = u_1 \cdot v_1 + u_2 \cdot v_2 + ... + u_n \cdot v_n$$ $$ = \begin{Vmatrix} \vec{u} \end{Vmatrix} \cdot \begin{Vmatrix} \vec{v} \end{Vmatrix} \cdot cos\theta$$
两个向量“相乘”,结果是一个数(标量)
更严格的说法:
两个向量的【点乘】
两个向量的【内积】
所以
$$ cos\theta = \frac{\vec{u} \cdot \vec{v}}{\begin{Vmatrix} \vec{u} \end{Vmatrix} \cdot \begin{Vmatrix} \vec{v} \end{Vmatrix}} $$如果 $\theta = 90^\circ$, $\vec{u} \cdot \vec{v} = 0$
如果 $\vec{u} \cdot \vec{v} = 0$,两个向量垂直;
如果 $\vec{u} \cdot \vec{v} > 0$,两个向量夹角为锐角;数值越大,两个向量相似度越高,可用于推荐系统
如果 $\vec{u} \cdot \vec{v} < 0$,两个向量夹角为钝角;
投影点的距离:
$\vec{v}$ 往 $\vec{u}$ 上投影
$$d = \begin{Vmatrix} \vec{v} \end{Vmatrix} cos\theta = \frac{\vec{u} \cdot \vec{v}}{\begin{Vmatrix} \vec{u} \end{Vmatrix}}$$
投影点的方向:
$$\hat{u}$$
投影点的坐标:
$$P_v = d \cdot \hat{u}$$
import numpy as np
print(np.__version__)
vec = np.array([1, 2, 3])
print(vec)
# np.array的创建
print(np.zeros(5))
print(np.ones(5))
print(np.full(5, 666))
# np.array的基本属性
print(vec)
print("size =", vec.size)
print("size =", len(vec))
print(vec[0])
print(vec[-1])
print(vec[0:2])
print(type(vec[0:2]))
# np.array的基本运算
vec2 = np.array([4, 5, 6])
print("{} + {} = {}".format(vec, vec2, vec+vec2))
print("{} - {} = {}".format(vec, vec2, vec-vec2))
print("{} * {} = {}".format(2, vec, 2*vec))
print("{} * {} = {}".format(vec, 2, vec*2))
print("{} * {} = {}".format(vec, vec2, vec*vec2)) # element-wise multiplication
print("{}.dot({}) = {}".format(vec, vec2, vec.dot(vec2))) # 点乘
print(np.linalg.norm(vec)) # vec 的模
print(vec/np.linalg.norm(vec)) # vec 的单位向量
# 上面这个单位向量的模应该为 1
print(np.linalg.norm(vec/np.linalg.norm(vec)))