如何使用 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/