如何在3维单位球中生成均匀分布的点?


11

我已经发布了一个先前的问题,这是相关的,但是我认为最好启动另一个线程。这次,我想知道如何在3-d单位球体内生成均匀分布的点,以及如何从视觉和统计角度检查分布?我看不到那里发布的策略可以直接转移到这种情况。


4
一旦您观察到原点距离内的点数必须与r 3成比例,就可以直接应用上一个问题中的技术。因此,如果你产生一个独立的均匀变量ü[ 0 1 ]用点沿着瓦特的球体的表面上,缩放瓦特通过ù 1 / 3的伎俩。[R[R3ü[01个]wwü1个/3
ub

@whuber:也许我只是没有了解先前技术的精髓。让我尝试您的描述。另外,这里有什么方法可以再次检查均匀性?
李强

2
@Qiang Ripley的K函数和卡方检验。您还可以检查点在球体表面上的径向投影的均匀性,这些点的长度的立方的均匀性以及这两个点的独立性。
ub

对我而言,“均匀分布”的含义不是那么明显……可能尝试对其进行定义将自动创建生成算法(=

@mbq,我认为定义的术语,我们需要有一个pdf fR,Θ,Φ(r,θ,ϕ)=r2
李强

Answers:


14

最简单的方法是在相应的超立方体中均匀地采样点,并丢弃不在球体内的点。在3D中,这种情况不应频繁发生,大约有50%的时间。(超立方体的体积为1,球体的体积为)。43π[R3=0.523 ...


+1。这是comp.graphics.algorithms常见问题解答“球面上的均匀随机点”
大卫·卡里

1
如果我们想在怎么办?n>100
战神

2
这称为“拒绝方法”。虽然在三个维度上都能很好地工作,但在27个维度上,只有27个球中的一个万亿分之一位于27球中,而不是在其余的27个立方体中,因此拒绝方法不能很好地推广。我之所以这样说是因为我目前需要均匀地将样品以2440个尺寸的球封装。
Reb.Cabin '19

13

您也可以在球坐标系中执行此操作,在这种情况下不会出现拒绝。首先,生成半径和随机的两个角度,然后使用过渡公式来恢复ÿŽX = - [R θ 余弦φÿ = - [R θ φž = - [R COS θ)。XÿžX=[Rθcosϕÿ=[Rθϕž=[Rcosθ

您生成 unifomly之间02 π。但是,半径r和倾斜角θ并不均匀。的概率的点为半径的球内- [R- [R 3这样的概率密度函数[R3 - [R 2。您可以轻松地检查均匀变量的立方根是否具有完全相同的分布,因此这就是生成r的方式。的概率,通过倾斜所定义的球状的圆锥内的点位于θ1 - COS θϕ02π[Rθ[R[R3[R3[R2[Rθ 1 - 1 - COS - θ / 2,如果 θ > π / 2。因此,密度 θ š Ñ θ / 2。您可以检查减去统一变量的反余弦是否具有正确的密度。(1cosθ)/21(1cos(θ))/2θ>π/2θsinθ/2

或者更简单地说,我们可以均匀地模拟的余弦在11之间θ-1个1个

在R中,如下所示。

n <- 10000 # For example n = 10,000.
phi <- runif(n, max=2*pi)
r <- runif(n)^(1/3)
cos_theta <- runif(n, min=-1, max=1)
x <- r * sqrt(1-cos_theta^2) * cos(phi)
y <- r * sqrt(1-cos_theta^2) * sin(phi)
z <- r * cos_theta

在编写和编辑此答案的过程中,我意识到该解决方案比我想象的要简单。

我认为,最简单,最计算有效的方法是遵循@ whuber的方法来生成单位球上所显示这篇文章,并与它们进行缩放[R Xÿž[R

xyz <- matrix(rnorm(3*n), ncol=3)
lambda <- runif(n)^(1/3) / sqrt(rowSums(xyz^2))
xyz <- xyz*lambda

3
由于没有拒绝,这是一个更好的答案。在高维空间中,由于接受概率低,拒绝采样的成本可能很高。
Kingledion'2

2
例如,代码的最后一位可以适应更高的维度d。为此,替换的所有实例3d
gui11aume17年

0

在我看来,最简单的选择也可以推广到高维球上(这不是球形坐标的情况,甚至拒绝采样的情况更是如此)是生成随机点,它是两个随机变量P = N / |的乘积。 | N | | * ù 1 / Ñ其中Ñ是高斯随机变量(即各向同性的,即指示在任何方向上均匀地)归一化,使得其位于球体和ü这是一个统一的随机变量[ 0 1 ]的功率1 /PP=ñ/||ñ||ü1个/ññü[01个] n是数据的维数,注意半径。1个/ññ

等等!


2
均匀分布的半径不会在球中给出均匀的点...
kjetil b halvorsen

1
真正。您需要稍微调整变量的分布,以考虑到较低/较高密度的区域。ü
Jean-Luc Bouchot,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.