我们先给出结论:
两个向量的点积除以两个向量的长度结果等于两个向量夹角的cos值
用公式来表示就是:
cos\theta = \frac{\vec{v}\cdot \vec{u}}{\left \| \vec{v} \right \|\left \| \vec{u} \right \|}
很多人脸识别算法中用两个向量夹角的cos值来表示两个人脸特征向量的之间的差距。cos值越小表示两个人脸越相似。这个cos值有时也被叫做余弦相似度或者余弦距离。

这篇文章我们就来证明一下这个等式为什么成立。

向量的长度

向量的长度是一个向量每个维度值得平方和开根号。
\left \| \vec{v} \right \|=\sqrt{\sum v_{i}^{2}}
比如一个二维向量(1,2,3),它的长度为:
\left \| (1,2,3) \right \|=\sqrt{1^{2}+2^{2}+3^{2}}

单位向量

单位向量的定义是长度为1的向量。
对于一个二维向量(1,0),(0,1)是单位向量,但是(1,1)不是一个单位向量。

上图中的圆是一个半径为1的圆。所以在一个二维单位向量以原点为起点的话,箭头都应该落在圆上。比如(1,0),(0,1),而(1,1)不是一个二维单位向量。

那一个普通向量如何在保证方向不变的情况下转化成一个单位向量呢?那就是给它的各个维度都除以它的长度。
\frac{\vec{v}}{\left \| \vec{v} \right \|}
比如对于(1,1)来说,保证向量方向不变,我们给每个维度都除以\sqrt{1^{2}+1^{2}}
得到(\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}}),这就是一个单位向量。

单位向量点乘等于夹角的cos


我们知道cos\theta ^{2}+sin\theta ^{2}=1,所以对于任意角度,cos和sin组成的向量(cos\theta ,sin\theta)都是单位向量。

那么我们对于任一向量(cos\theta ,sin\theta)和(1,0)之间的点成为cos\theta *1 ,sin\theta *0=cos\theta
我们继续推广到任意两个单位向量之间:

两个向量分别为:(cos\alpha,sin\alpha)(cos\beta ,sin\beta )并且\beta =\alpha +\theta
则它们的点积为cos\alpha cos\beta +sin\alpha sin\beta
根据三角公式有:cos\alpha cos\beta +sin\alpha sin\beta=cos(\beta-\alpha)=cos\theta

任意两个向量点乘的意义

上边我们说的是两个单位向量的点积,那么对于两个非单位向量呢?我们只要让每个向量除以各自的长度,就转化为了单位向量。则有:
cos\theta = \frac{\vec{v}\cdot \vec{u}}{\left \| \vec{v} \right \|\left \| \vec{u} \right \|}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: