如何在d维球/球内生成均匀的随机点?

时间:2019-02-06 00:14:21

标签: algorithm multidimensional-array random geometry linear

我环顾四周,在单位球上/单位球上生成均匀随机点的所有解决方案都是针对2或3维设计的。

什么是(易处理)在任意尺寸的球内 内生成均匀随机点的方法?特别是,不仅仅是在表面上球。

首先,在多维数据集中生成随机点并抛弃范数大于1的点在高维度上是不可行的。高尺寸时,单位球的体积与单位立方体的体积之比为0。即使在10个维度中,单位立方体中也只有约0.25%的随机点也位于单位球内部。

1 个答案:

答案 0 :(得分:4)

d维球中生成均匀分布的随机点的最佳方法似乎是考虑极坐标(方向而不是位置)。 下面提供了代码。

  1. 在单位球上随机分布均匀分布的点。
  2. 选择一个随机半径,其中半径的似然性对应于半径为d的球的表面积

此选择过程将(1)使所有方向的可能性均等,并且(2)使单位球内的球表面上的所有点均等可能。这将在球的整个内部生成我们所需的均匀随机分布。

随机拾取方向(在单位球上)

为了实现(1),我们可以从d个独立绘制的高斯分布的随机绘图中随机生成一个向量,并将其标准化为单位长度。 This works是因为高斯分布具有x^2指数的概率分布函数(PDF)。这意味着联合分布(对于独立的随机变量,这是其PDF的乘积)的指数将为(x_1^2 + x_2^2 + ... + x_d^2)。注意,这类似于球体在d维上的定义,这意味着来自高斯分布的d个独立样本的联合分布对于旋转是不变的(矢量在球体上是均匀的)。

这是2D生成的200个随机点的样子。


(随机选择半径)

为了实现(2),我们可以使用与半径为d的{​​{1}}尺寸的球的表面积对应的累积分布函数(CDF)的逆来生成半径。我们知道surface area of an n-ballr成正比,这意味着我们可以在r^d范围内将其用作CDF。现在,通过将[0,1]到反[0,1]的范围内的随机数映射来生成随机样本。

这是r^(1/d)的CDF(对于二维)的视觉效果,x^2中随机生成的数字将映射到该曲线上的相应x坐标。 (例如[0,1].1


上述代码

最后,这是一些计算以上所有内容的Python代码(假设您已安装NumPy)。

.317

对于后代,这是通过上述代码生成的5000个随机点的图像。