给定单位向量 n ,我需要生成尽可能快,另一个随机单位向量 m 。 m 与 n 的偏差应为正参数sigma
的顺序,单位 m 的分布球体应围绕 n 对称。
我对单位矢量的表示没有特殊要求,因此您可以使用球面角度,笛卡尔坐标或其他任何方便的方法。此外,对于使用的概率分布没有确切的要求,只要它在 m 偏离 n 的sigma
时衰减。
我正在使用gsl
和C
。我用笛卡尔坐标得出了一种有点复杂的方法。如果它有用,我会稍后发布,但我希望看到人们的想法。
答案 0 :(得分:2)
您可能知道,每个维度均匀分布在0
左右的向量会产生一个点的多维数据集,其中更多的值集中在角落中。但是每个维度通常分布在0
左右的向量要好得多。点的极角均匀分布在单位球面上,它们的半径集中在原点附近。您可以生成这样的矢量,根据参数sigma
更改标准差。将向量添加到n
,对结果进行标准化,并将其调用好。
这需要一个平方根和3个正态分布的随机数。您可以使用Ziggurat algorithm快速获取正态分布的随机数。更近似的选项是对3个或更多个均匀分布的随机数求和。还有另一种可能性:预先计算许多随机向量的表,并使用随机索引进行表查找。这些方法中的每一种都以不同的方式平衡计算和存储,因此您应该对它们进行全部编码并测试速度。
答案 1 :(得分:1)
为什么不简单地使用球面极坐标。根据选择的某种指数衰减分布,在区间[0,2 * pi]和极角的均匀分布上生成方位角,以满足您的衰减要求。然后,您可以通过这些随机采样的极坐标和方位角生成 m 向量作为原始 n 向量的角位移。