向量是由n个实数组成的一个n行1列(n1)或一个1行n列(1n)的有序数组;
向量的点乘,也叫向量的内积、数量积,对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量。
代数定义
于向量a和向量b:
a和b的点积公式为:
前提条件:要求一维向量a和向量b的行列数相同。
几何定义
设二维空间内有两个向量 \(\vec {a}\) 和 \(\vec {b}\) , $ |\vec {a} |$ 和 $ |\vec {b} |$表示向量a和b的大小,它们的夹角为 \(θ (0 \leq θ \leq π)\),则内积定义为以下实数:
\[ \vec {a} \cdot \vec {b} = |\vec {a} | |\vec {b} |cosθ \]该定义只对二维和三维空间有效。
这个运算可以简单地理解为:在点积运算中,第一个向量投影到第二个向量上(这里,向量的顺序是不重要的,点积运算是可交换的),然后通过除以它们的标量长度来“标准化”。这样,这个分数一定是小于等于1的,可以简单地转化成一个角度值。
上面两个定义是可以互相推理出对方的,具体推理过程看:
https://baike.baidu.com/item/%E7%82%B9%E7%A7%AF/9648528
参考:
相似度判断
在二维空间,点积可以想象成一条直线在另一条直线上的投影。点击为零表示相互垂直。
a·b>0 方向基本相同,夹角在0°到90°之间
a·b=0 正交,相互垂直
a·b<0 方向基本相反,夹角在90°到180°之间
所以点积反映着两个向量的“相似度”,两个向量越“相似”,它们的点积越大。
gonum 的点积计算例子
a := mat.NewDense(2, 3, []float64{
1, 2, 3,
4, 5, 6})
v1 := a.RowView(0)
v2 := a.RowView(1)
fmt.Printf("%v\n\n", mat.Dot(v1, v2))
// 输出结果 32 1*4+2*5+3*6