matlab - 如何在 8 维球体上生成网络

标签 matlab random geometry

如何使用 Matlab 生成均匀分布(或分布)在 8 维单位球面上的 3^10 个点的网络?

最佳答案

在 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)));

关于matlab - 如何在 8 维球体上生成网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3278424/

相关文章:

matlab - 每个超像素上的 Gabor 滤波器

javascript - 为什么我的脚本中会遇到这个 if 语句? JS

c++ - 生成贝塞尔曲面作为子补丁

actionscript-3 - 线触发器的 ActionScript 角度

c++ - 从点创建 OOBB

matlab - 如何在 Matlab 中存储此结构(整数列表列表)?

algorithm - 图像中数字的识别(Matlab)

image - 如何在 MATLAB 中保存高分辨率图形

具有非均匀离散密度的随机数

java - 创建一个随机向定义的终点移动的 Java Point 数组