迭代所有长度为“L”的向量

时间:2015-01-12 00:24:49

标签: c++ combinatorics

如何迭代具有指定长度(例如单位长度)的d维度的所有可能向量,其中delta是步长。


请注意,delta可能非常小,例如1e-3单位向量。 d通常在[0,5]范围内,但这不是一个严格的限制!


这种愚蠢的方法是使用delta*i列表i in [0,N)并生成所有可能的组合,例如在n中选择n并选择总计为1的组合。但这似乎效率很低,我确信有更好的方法,我不知道。


镐应至少接近均匀分布在表面上。

1 个答案:

答案 0 :(得分:1)

好的,我想我知道你需要什么。基本上,如果你选择

X=(X1, X2, ..., Xn)/norm(X)

其中X1, X2,..., Xn通常分布为N(0,1)(平均值为0且标准差为1),norm(X)X的L2(欧几里德)范数,则保证向量X均匀分布在n - 维单位球的表面上。

现在,既然你想要离散化,只需从二项式分布中绘制每个Xi(在极限我们知道它成为泊松分布,通过中心极限定理,收敛到高斯分布,见http://www.roe.ac.uk/japwww/teaching/astrostats/astrostats2012_part2.pdf),你就完成了。当然,您将在维度n中获得指数缩放,但我认为没有任何其他方式,因为此类向量的数量随维度呈指数级增长。