作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
例如,对于维度 d=2
,这意味着我们可以生成一个随机角度 0<=a<2*pi
, 然后我们就可以使用
(x_1,x_2)=(r*cos(a),r*sin(a))
作为随机 vector 。
但是,对于维度 d>=3
,我们不能只生成一个角度并用它来表示 vector 。那么我们如何生成这样一个 vector (x_1,...,x_d)
, 在 x_1^2+x_2^2+...+x_d^2=r^2
上同分布?
我刚刚想出了一个新想法,我们可以生成一个 vector (x_1,...,x_d)
这样 -r<=x_i<r
对于所有 i
, 如果 x_1^2+x_2^2+...+x_d^2<=r^2
则将其归一化如果 x_1^2+x_2^2+...+x_d^2>r^2
就放弃它.
但是,有一个缺点,即x_1^2+x_2^2+...+x_d^2<=r^2
的概率如果 d
会变得很小非常大。有没有更好的解决方案?
最佳答案
生成独立且服从标准正态分布的随机变量(X_1, X_2, ... X_d),然后除以sqrt(X_1^2+...+X_d^2)/r归一化。
独立正态分布的 union 分布是旋转对称的不仅是正确的,它还表征了正态分布。
您可以使用 Box-Muller transform 从均匀随机变量中有效地生成具有标准正态分布的自变量对。 .
关于java - 如何在编程语言中生成一些长度固定为 r 的同分布伪随机 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30566802/
我是一名优秀的程序员,十分优秀!