逐点乘法和右矩阵除法

时间:2015-10-26 15:56:51

标签: r matlab

我目前正试图在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中的不一致数组错误结束。

1 个答案:

答案 0 :(得分:4)

map.on('singleclick', function (evt) { position = evt.coordinate; .... }) - 维单位范围内抽取n个随机点的此操作可以用以下单词表示:

  1. 使用标准正态分布中的条目构建d x n矩阵
  2. 将每行标准化,使其具有(2-norm)幅度1
  3. 对于每一行,通过从均匀分布(0到1之间)中抽取来计算随机值,并将该值提高到d幂。将该值乘以该行中的所有元素。
  4. 以下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来构造与我们原始矩阵完全相同的矩阵的工作,这些矩阵用于这些特定于行的操作。