导航

向量的点积

Posted on 2022-04-29 19:55  蝈蝈俊  阅读(1329)  评论(0编辑  收藏  举报

向量是由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