推导 1:用余弦定理(最经典)
在平面或三维里,把向量 a,b 都从原点出发,考虑三角形的三条边:
一条边长度:∥a∥
另一条边长度:∥b∥
第三条边是 a−b长度:∥a−b∥
夹角就是 a 与 b 的夹角 θ
余弦定理告诉你:
另一方面,利用点积恒等式展开:
把两条对同一个量的表达式相等:
两边消掉,再除以 −2:
✅ 得证。
所以这个公式是“点积和几何距离(余弦定理)兼容”时必然成立的关系。
推导 2:用“投影”的几何定义(更直觉)
把在
的方向上做投影。
的模:
在
上的标量投影长度是:
点积a · b的几何解释是:
- 取向量b的模长|b|(即 OB 的长度)
- 乘以向量a在b方向上的投影分量(即 OL 的长度|a| cos θ)
所以:a · b = |b| × (|a| cos θ) = |a| |b| cos θ
这正是图片底部公式展示的。
✅ 得证。
如何用点积求夹角 θ
从公式反推:cos θ = (a · b) / (|a| |b|)
只要知道两个向量的坐标,就能:
- 先算出点积 a · b(用坐标分量相乘求和)
- 算出各自的模 |a| 和 |b|
- 除一下得到 cos θ
- 再反余弦得到 θ 本身(θ = arccos( (a · b) / (|a| |b|) ))
θ 的范围是 0° 到 180°:
- θ = 90° 时,cos θ = 0 → 点积 = 0(垂直)
- θ < 90° 时,cos θ > 0 → 点积 > 0(锐角)
- θ > 90° 时,cos θ < 0 → 点积 < 0(钝角)
一句话总结它“为什么必然成立”
在欧氏空间中:
让长度与点积绑定
余弦定理描述距离与角度的关系
两者必须一致 ⇒ 就推出
重要补充:它对什么情况下成立?
✅ 对**标准点积(欧氏内积)**成立:
✅ 对更一般的“内积空间”也成立,但公式写成:
⚠️ 如果你用的不是欧氏内积(比如某些非标准度量),那“θ”的定义也要跟着内积变,否则就不再是同一个几何角度了。
下面就用最经典的勾股数 (3,4,5)来把
“算出来 + 看出来”。
演示 1:用 (3,4,5) 直接把 cosθ 算出来
取两个向量(都从原点出发):
① 先算长度(都是整数,很舒服)
② 算点积
③ 代入公式求 cosθ
**结论:**夹角 θ 的余弦就是 3/5。
为什么这就是“勾股数”的几何意义?
注意 b=(5,0) 就是x 轴方向长度 5的向量。
而 a=(3,4) 和 x 轴夹角的那个直角三角形,正好是:
斜边:∥a∥=5
邻边(在 x 轴上的投影长度):3
对边:4
所以几何上本来就有:
cosθ=邻边/斜边=3/5
你看,点积推出来的 cosθ,和勾股三角形的 cosθ完全一致。
顺便把公式本体验证一遍
我们已经算到:
∥a∥=5
∥b∥=5
cosθ=3/5
那么右边:
左边点积。
✅ 两边相等,公式成立。
演示 2(可选加深):用余弦定理把它“推导式验证”
同样取上面 a,b。先算:
余弦定理(把 a,b,a−b 当三角形三边):
代入数:
又得到同样的结果。✅
再给一个更大的勾股数: (5,12,13)
取
这就是经典三角形里 cosθ=邻边/斜边=5/13。
我们就把“两个都斜着”的情况也用勾股数做得同样干净:长度都是整数、点积也是整数,最后得到一个漂亮的 cosθ。
例子:两根斜向量都来自勾股三角形
选两条长度都为 5 的向量(都是 3-4-5):
它们都不是沿坐标轴的,都是“斜着”的。
① 长度
② 点积
③ 余弦相似度(也就是 cosθ)
**解释:**0.96 非常接近 1,说明两向量夹角很小、方向非常接近。
顺便算一下角度大小(感受一下):
(不用死记数值,你只要记得 0.96 很接近 1 ⇒ 角度很小。)
为什么这个结果“很合理”?(用投影直觉解释)
把 a 投影到 b 的方向上:
b 的单位向量是
投影长度(标量投影):
而 ∥a∥=,说明 a 在 b 方向上的“有效分量”是4.8/5 = 0.96,也就是:
投影长度/∥a∥=cosθ=0.96
这就是“余弦相似度”最直观的意义:
A 沿着 B 的方向,能“投影出”A 的多少比例。
越接近 1,说明 A 基本都沿着 B。
再给一个“中等相似”的勾股数例子(让你感受 0.6/0.8 这种)
让两向量长度分别是 5 和 13(3-4-5 与 5-12-13):
① 长度
② 点积
③ 余弦相似度
这个也很接近 1,说明它们也挺接近(这两个方向确实都在第一象限、都偏“往右上”)。
造一个“接近 0”的例子(几乎垂直,但仍用整数)
用两组勾股数拼出近似正交的方向:
注意 b 仍然长度 5(因为)。
点积:
于是:
**解释:**这对向量正交,余弦相似度为 0。
最后把“余弦相似度”一句话钉死
它等于 cosθ,所以:
只看夹角(方向)
不受长度影响
范围固定 [−1,1],特别适合做“相似度打分/排序”