【问题标题】:How to generate a net on a 8-dimensional sphere如何在 8 维球体上生成网络
【发布时间】:2010-07-19 04:17:33
【问题描述】:

使用Matlab,如何生成一个3^10个均匀分布在8维单位球面上的网?

【问题讨论】:

  • 我觉得这个问题更多是关于编程和算法的。
  • 我正在阅读到目前为止的答案,我觉得他们错过了问题的真正意义。我认为我们不是在遵循随机分布的 3^10 个点之后,而是与邻居等距的 3^10 个点,就像如果中心是,十二面体的 20 个顶点将分布在一个单位球体上每个有问题的顶点 1 个单位。换句话说,我们追求的是一个 8 维正多面体。对吗?
  • 郑重声明,想到一个 8 维球体让我流鼻血。

标签: matlab random geometry


【解决方案1】:

在 n-d 单位球体上获取点的一种简单方法是创建一个 n-d 立方体,切掉角,并将剩余的半径标准化为 1。请注意,如果没有切割,分布将不均匀。

但是,由于超球面相对于封闭框的体积随着维度的增加而减小,这并不是一种特别有效的方法。

更好的方法是生成一个 n-d 正态分布点(半径)的数组,并将它们归一化为球体的半径 - n-d 正态分布是径向对称的,因此表面上的分布将是均匀的

%# set-up
nPoints = 3^10;
nDim = 8;

%# create normally distributed variables
points = randn(nPoints,nDim);

%# normalize by dividing by the norm (=square root of sum(points.^2,2) )
points = bsxfun(@rdivide,points,sqrt(sum(points.^2,2)));

【讨论】:

  • @Marc:谢谢你发现这个!
【解决方案2】:

来自维基百科n-sphere

生成均匀分布 (n − 1) 球面上的随机点 (即 n 球的表面), Marsaglia (1972) 给出以下 算法。

生成一个n维向量 正常偏差(使用 N(0, 1),虽然实际上是选择 的方差是任意的), \mathbf{x}=(x_1,x_2,\ldots,x_n)。

现在计算这个的“半径” 观点, r=\sqrt{x_1^2+x_2^2+\cdots+x_n^2}。

向量 \frac{1}{r} \mathbf{x} 是 均匀分布在表面 单位 n 球。

完成此操作的 matlab 代码片段是:

numdims = 8;
numpts = 3^10;
x = randn([numdims numpts]);
lx = repmat(sqrt(sum(x.^2,1)), [numdims 1]);
x = x./lx;
%x(:,j) is the jth point on the circle)

【讨论】:

    【解决方案3】:

    好的,on Wikipedia 我们读到了

    半径为 r 的 n 球面定义为 (n + 1) 维欧几里得空间中与中心点距离为 r 的点的集合,其中半径 r 可以是任何正实数

    所以您的问题变成了在 7 空间中生成 3^10 个向量之一。在不丢失任何东西的情况下,我们可以让r = 1。该方法将是在 7 空间中生成随机向量,然后以通常的方式将它们归一化为单位长度

    这是我匆忙敲出的一些代码,我知道我应该有向量化的东西而不是编写循环,我会把它留给 OP。代码不需要任何解释。

    pointset = rand(3^10,7);
    normset = zeros(3^10,1);
    for ix = 1:3^10
      normset(ix) = norm(pointset(ix,:));
    end
    for ix = 1:3^10
      pointset(ix,:) = pointset(ix,:)/normset(ix);
    end
    

    当然,这依赖于 Matlab 的 PRNG 产生均匀分布的数字,以在 8 球体上创建一个均匀分布的网络。

    【讨论】:

    • 我认为要在表面上获得均匀分布,您需要将 rand 替换为 randn(值需要是高斯分布,而不是均匀分布)。我敢肯定,如果您使用 rand,您至少需要减去 1/2,否则您的所有点都将在第一个超象限中(所有 x,j 的 x_j > 0)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2020-12-23
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    相关资源
    最近更新 更多