• 数学杂谈:高维空间向量夹角小记

    • 1. 问题描述
    • 2. n维空间中的均匀向量
      • 1. 2维以及3维空间中的特殊情况

        • 1. 2维空间中的均匀分布向量
        • 3. 3维空间中的均匀分布向量
      • 2. n维坐标系中的均匀向量
      • 3. 正态分布的巧妙应用
    • 3. n维空间中两向量夹角考察
    • 4. 总结 & 思考

1. 问题描述

故事起源于long long ago的时候看到的苏剑林某一篇博客当中提到了一个结论:

  • 高维空间中两个随机向量大概率是相互正交的。

当时就对这个结论比较在意了,今天突然地又想到了这个问题,就想着趁着放假把这个结论验证一下。

显然,苏剑林在博客中提到的这个结论的表述是比较随意的,为了更好地定义我们的问题,我们将其细化一下:

  • 对于n维中间的单位球面上的两个随机向量,他们之间的夹角θ\thetaθ在n取大值时,趋近于90度。

要证明这个结论感觉比较难,但是要演示说明一下这个结果确实相对容易的,我们的第一反应就是蒙特卡洛模拟一下,实际生成NNN组nnn维空间上的均匀单位向量,然后考察一下他们之间的角度分布。

但是,要做到这件事,我们首先需要生成一下n维空间当中的均匀分布的单位向量。

2. n维空间中的均匀向量

1. 2维以及3维空间中的特殊情况

首先,我们来考察一些简单的情况,即2维和3维空间当中的情况。

1. 2维空间中的均匀分布向量

二维空间中的均匀分布向量其实就是单位圆上面的均匀分布向量,因此,我们只需要给出一个000到π\piπ之间均匀分布的角度ϕ\phiϕ即可得到一个均匀分布的单位向量v⃗=(sinθ,cosθ)\vec{v} = (sin\theta, cos\theta)v=(sinθ,cosθ)。

3. 3维空间中的均匀分布向量

对于三维的情况,事实上我相信大部分读者只要熟悉坐标系变换的话就还是很轻易能够写出解答的。

我们极坐标系下的坐标如下:
{x=r⋅sinθ⋅sinϕy=r⋅sinθ⋅cosϕz=r⋅cosθ\left \{ \begin{aligned} x & = r\cdot sin\theta \cdot sin\phi \\ y & = r\cdot sin\theta \cdot cos\phi \\ z & = r\cdot cos\theta \end{aligned} \right. ⎩⎪⎨⎪⎧​xyz​=r⋅sinθ⋅sinϕ=r⋅sinθ⋅cosϕ=r⋅cosθ​

进而我们可以得到,单位体积元的表达公式为:
ρ=dxdydz=r2sinθdrdθdϕ\begin{aligned} \rho & = dxdydz \\ & = r^2sin\theta drd\theta d\phi \end{aligned} ρ​=dxdydz=r2sinθdrdθdϕ​

可以看到,对于单位面元而言,其具体的表达式为 ρ=C⋅sinθdθdϕ=C′⋅dcosθ⋅dϕ\rho = C \cdot sin\theta d\theta d\phi = C' \cdot dcos\theta \cdot d\phiρ=C⋅sinθdθdϕ=C′⋅dcosθ⋅dϕ。因此,要生成一个均匀分布,我们只需要按照cosθcos\thetacosθ的分布生成一个θ\thetaθ,然后生成一个000到2π2\pi2π上面均匀分布的ϕ\phiϕ即可。

给出具体的python实现如下:

import numpy as npdef dummy():theta = np.arccos(np.random.uniform(-1, 1))phi = np.random.uniform() * 2 * np.pix = np.sin(theta) * np.sin(phi)y = np.sin(theta) * np.cos(phi)z = np.cos(theta)return (x, y, z)

2. n维坐标系中的均匀向量

现在,我们来考察n维空间中的情况。

我们仿照3维空间的情况,只要先给出体积元的极坐标表达式,然后考察其中空间角的表达式即可。

给出n维空间下的极坐标转换如下:

{x1=r⋅cosθ1x2=r⋅sinθ1⋅cosθ2x3=r⋅sinθ1⋅sinθ2⋅cosθ3...xn−1=r⋅sinθ1⋅sinθ2⋅...⋅sinθn−2⋅cosθn−1xn=r⋅sinθ1⋅sinθ2⋅...⋅sinθn−2⋅sinθn−1\left\{ \begin{aligned} & x_1 = r \cdot cos\theta_1 \\ & x_2 = r \cdot sin\theta_1 \cdot cos\theta_2 \\ & x_3 = r \cdot sin\theta_1 \cdot sin\theta_2 \cdot cos\theta_3 \\ & ... \\ & x_{n-1} = r \cdot sin\theta_1 \cdot sin\theta_2 \cdot ... \cdot sin\theta_{n-2} \cdot cos\theta_{n-1} \\ & x_n = r \cdot sin\theta_1 \cdot sin\theta_2 \cdot ... \cdot sin\theta_{n-2} \cdot sin\theta_{n-1} \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​​x1​=r⋅cosθ1​x2​=r⋅sinθ1​⋅cosθ2​x3​=r⋅sinθ1​⋅sinθ2​⋅cosθ3​...xn−1​=r⋅sinθ1​⋅sinθ2​⋅...⋅sinθn−2​⋅cosθn−1​xn​=r⋅sinθ1​⋅sinθ2​⋅...⋅sinθn−2​⋅sinθn−1​​

可以得到n维空间上的体积元:
dx1dx2...dxn=∂(x1,x2,...,xn)∂(r,θ1,θ2,...,θn−1))⋅drdθ1dθ2...dθn−1=det∣∂x1∂r∂x1∂θ1...∂x1∂θn−1∂x2∂r∂x2∂θ1...∂x2∂θn−1...∂xn∂r∂xn∂θ1...∂xn∂θn−1∣⋅drdθ1dθ2...dθn−1=rn−1sinn−2θ1sinn−3θ2...sin2θn−3sinθn−2⋅drdθ1dθ2...dθn−1\begin{aligned} dx_1dx_2...dx_n & = \frac{\partial(x_1, x_2, ..., x_n)}{\partial(r, \theta_1, \theta_2, ..., \theta_{n-1}))} \cdot drd\theta_1d\theta_2...d\theta_{n-1} \\ \\ & = det \begin{vmatrix} \frac{\partial x_1}{\partial r} & \frac{\partial x_1}{\partial \theta_1} & ... & \frac{\partial x_1}{\partial \theta_{n-1}} \\ \frac{\partial x_2}{\partial r} & \frac{\partial x_2}{\partial \theta_1} & ... & \frac{\partial x_2}{\partial \theta_{n-1}} \\ ... \\ \frac{\partial x_n}{\partial r} & \frac{\partial x_n}{\partial \theta_1} & ... & \frac{\partial x_n}{\partial \theta_{n-1}} \end{vmatrix} \cdot drd\theta_1d\theta_2...d\theta_{n-1} \\ \\ & = r^{n-1}sin^{n-2}\theta_1sin^{n-3}\theta_2...sin^2\theta_{n-3}sin\theta_{n-2} \cdot drd\theta_1d\theta_2...d\theta_{n-1} \end{aligned} dx1​dx2​...dxn​​=∂(r,θ1​,θ2​,...,θn−1​))∂(x1​,x2​,...,xn​)​⋅drdθ1​dθ2​...dθn−1​=det∣∣∣∣∣∣∣∣∣​∂r∂x1​​∂r∂x2​​...∂r∂xn​​​∂θ1​∂x1​​∂θ1​∂x2​​∂θ1​∂xn​​​.........​∂θn−1​∂x1​​∂θn−1​∂x2​​∂θn−1​∂xn​​​∣∣∣∣∣∣∣∣∣​⋅drdθ1​dθ2​...dθn−1​=rn−1sinn−2θ1​sinn−3θ2​...sin2θn−3​sinθn−2​⋅drdθ1​dθ2​...dθn−1​​

由此,我们只需要令任意的θi\theta_iθi​满足分布条件sinn−1−iθidθisin^{n-1-i} \theta_i d\theta_{i}sinn−1−iθi​dθi​是均匀分布,即可得到全空间范围内的一个针对空间角均匀分布的随机向量。

当然,这件事并不容易实现就是了。

当然,如果可以令xix_ixi​是(−∞,∞)(-\infty, \infty)(−∞,∞)范围内的均匀分布,那么事实上随机生成的向量也是在空间角上均匀的,但是这显然也同样难以实现。

3. 正态分布的巧妙应用

这里,我们给出一个黑科技,即虽然我们无法在(−∞,∞)(-\infty, \infty)(−∞,∞)范围内生成一个均匀随机分布,但是我们可以退而求其次,如果对于一个n维向量,他的每一个维度上的值都满足正态分布N(0,1)N(0, 1)N(0,1),那么这样随机生成的向量在任意的n维空间角上也是均匀分布的

我们考察其在任意n维空间体积元内的概率密度如下:

ρ=Πi=1n12πe−xi22=(12π)n⋅e∑i=1nxi2/2=(12π)n⋅er2/2\begin{aligned} \rho & = \Pi_{i=1}^{n} \frac{1}{\sqrt{2\pi}} e^{-\frac{x_i^2}{2}} \\ & = (\frac{1}{\sqrt{2\pi}})^n \cdot e^{\sum_{i=1}^{n} x_i^2 / 2} \\ & = (\frac{1}{\sqrt{2\pi}})^n \cdot e^{r^2 / 2} \\ \end{aligned} ρ​=Πi=1n​2π​1​e−2xi2​​=(2π​1​)n⋅e∑i=1n​xi2​/2=(2π​1​)n⋅er2/2​

可以看到,这个空间体积元上的概率密度只与径向距离r有关,而与空间角无关,因此,上述方式构造的n维向量在n维空间角上是呈现均匀分布的。

而我们将其进行归一化处理,即可得到n维空间当中均匀分布的单位向量。

我们在二维和三维空间当中验证上述方法的有效性如下:

3. n维空间中两向量夹角考察

综上,我们即可对n维空间上的单位向量进行随机生成。

那么,我们就可以通过蒙特卡洛生成的方式来考察两个随机向量之间的夹角与维度n之间的变化关系。

我们给出结果图如下:

可以看到:

  • 对于任意维度n,两个随机向量之间的夹角θ\thetaθ的均值都是90度;
  • 随着维度n的增加,夹角θ\thetaθ的标准差分布逐渐减小,最终收敛到0,即在高维空间当中,两个向量的夹角将会非常接近于90度。

4. 总结 & 思考

综上,苏剑林在他的博客当中提到的这个结论就得到了证明,确实是一个非常有意思的结论。

数学杂谈:高维空间向量夹角小记相关推荐

  1. 高中数学必修二空间向量及其运算(经典案例)

    今天给同学分享高中数学必修二空间向量及其运算知识梳理,通过五个经典案例解答,对高中数学必修二空间向量及其运算要点整合. 一. 知识点梳理 2.两个向量的数量积(与平面向量基本相同) 4.直线的方向向量 ...

  2. 【嵌入式算法】空间向量夹角公式及其应用

    有些设备正常工作时需按合适的方位安装,比如GPS天线必须朝向天空才能保证信号最佳,温湿度传感器监测口必须朝向被测目标才能及时响应.软件需求是在安装角度异常时提醒用户改变位置.那设备如何感知当前方位呢? ...

  3. python之计算空间向量夹角

    原理: 代码 import numpy as npdef cal_angle_of_vector(v0, v1, is_use_deg=True):dot_product = np.dot(v0, v ...

  4. c++计算空间向量的夹角

    代码 void UtilsClass::normalization(double unnorm_array[3]) {// 归一化double max_val = std::max(abs(unnor ...

  5. Kinect体感机器人(三)—— 空间向量法计算关节角度

    Kinect体感机器人(三)-- 空间向量法计算关节角度 By 马冬亮(凝霜  Loki) 一个人的战争(http://blog.csdn.net/MDL13412) 终于写到体感机器人的核心代码了, ...

  6. (转)Kinect体感机器人—— 空间向量法计算关节角度

    Kinect体感机器人(三)-- 空间向量法计算关节角度 By 马冬亮(凝霜  Loki) 一个人的战争(http://blog.csdn.net/MDL13412) 终于写到体感机器人的核心代码了, ...

  7. matlab求两向量夹角_高中数学《平面向量的数量积》说课稿

    高中数学<平面向量的数量积>说课稿 作为一位无私奉献的人民教师,有必要进行细致的说课稿准备工作,借助说课稿可以让教学工作更科学化.那么写说课稿需要注意哪些问题呢?以下是小编为大家收集的高中 ...

  8. three.js数学函数向量夹角弧度转角度

    three.js数学库 three.js中内置了很多数学库,功能丰富,但是很多都没实际用过.现在慢慢整理记录一些常用的函数,加深印象吧. Box2 Box3 Color Cylindrical Eul ...

  9. matlab求两向量夹角_初学讲义之高中数学十四:向量的数量积

    上篇讲了向量的基本概念和简单的加减运算,这部分的数学运算与几何图形变换之间的联系是非常直观的,理解起来非常容易 本篇讲的内容在数学运算与几何图形变换之间的联系不那么直观,需要花功夫反复琢磨运算的数学意 ...

  10. [从头学数学] 第191节 空间向量与立体几何

    剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第五转的修炼. 这次要研究的是[空间向量与立体几何]. 正剧开始: 星历2016年04月23日 11:00:22, 银河系厄尔斯星球 ...

最新文章

  1. codeforces396A
  2. c语言file_C语言编程第20讲——几个有用的编译时才确定值的符号
  3. Lync前端服务器的卸载
  4. 【Python基础】python使用PyPDF2和pdfplumber操作pdf
  5. 利用css制作3d图片旋转_练习
  6. 有没有一些细分IT行业,没有35岁现象
  7. Smali 语法文档
  8. 【个人笔记】Vue+ElementUI后台模板配置动态路由
  9. mysql 执行时间有波动_阿里P8架构师谈mysql性能优化思路
  10. linux用sed命令修改IP地址,通过sed命令获取IP地址
  11. WPF程序支持多国语言
  12. Mysql表和数据的复制操作
  13. 世界观--哲学--抽象--虚无
  14. FastJson耗时
  15. codewars练习(javascript)-2021/2/24
  16. 上海宝付高谈保险扣费如何追回
  17. Windows和Linux简单命令的总结
  18. 前端学习: 用css设置文字样式
  19. OLTP与OLAP理解
  20. buck dcm占空比计算_buck电路输出电容及其他参数计算

热门文章

  1. java中 什么意思?比如130
  2. JQAjax读页面里面的方法
  3. python的parse函数没有执行——问题已解决
  4. 一文了解驱动程序及更新方法
  5. Kubernetes 外部 IP Service 类型
  6. Data Structure - Doubly Linked List (Java)
  7. linux 修改网卡 mac地址命令,Centos系统下查看和修改网卡Mac地址(附ifconfig命令格式)...
  8. 关于bss段的一些思考
  9. matplotlib的学习,全是源码,勿喷
  10. windows7 内部版本7601,此windows副本不是正版