我目前正试图在R中重新创建这个Matlab函数:
function X = uniform_sphere_points(n,d)
% X = uniform_sphere_points(n,d)
%
%function generates n points unformly within the unit sphere in d dimensions
z= randn(n,d);
r1 = sqrt(sum(z.^2,2));
X=z./repmat(r1,1,d);
r=rand(n,1).^(1/d);
X = X.*repmat(r,1,d);
关于正确的矩阵划分,我安装了pracma包。我的R代码现在是:
uniform_sphere_points <- function(n,d){
# function generates n points uniformly within the unit sphere in d dimensions
z = rnorm(n, d)
r1 = sqrt(sum(z^2,2))
X = mrdivide(z, repmat(r1,1,d))
r = rnorm(1)^(1/d)
X = X * matrix(r,1,d)
return(X)
}
但它并没有真正起作用,因为我总是以R中的不一致数组错误结束。
答案 0 :(得分:4)
从map.on('singleclick', function (evt) {
position = evt.coordinate;
....
})
- 维单位范围内抽取n
个随机点的此操作可以用以下单词表示:
d
x n
矩阵d
幂。将该值乘以该行中的所有元素。以下R代码执行以下操作:
1/d
请注意,在第二行代码中,我利用了将R中的unif.samp <- function(n, d) {
z <- matrix(rnorm(n*d), nrow=n, ncol=d)
z * (runif(n)^(1/d) / sqrt(rowSums(z^2)))
}
x n
矩阵乘以长度为d
的向量的事实,将每行乘以该向量中的对应值。这为我们节省了使用n
来构造与我们原始矩阵完全相同的矩阵的工作,这些矩阵用于这些特定于行的操作。