在Matlab中使用mvnrnd生成三维数组?

时间:2014-05-09 15:34:06

标签: matlab

我需要使用命令B在Matlab中生成三维矩阵mvnrnd。特别是,让

mu=[0 0; -1 -3; 0 4; 2 4; 8 1]

sigma=repmat(1/(3^2)*eye(2),[1,1,5])

如果我使用命令

B= mvnrnd(mu,sigma)

我得到一个矩阵5x2,其中每行i都来自N(mu(i,:), sigma(:,:,i))。 相反,我希望B5x2xr,即每行iN(mu(i,:), sigma(:,:,i)) r次采样。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

  1. 沿第一维重复mu,沿第三维重复sigma r,并将其反馈给mvnrnd。这样您就可以获得所需数量的样本,但r矩阵沿第一维堆叠,而不是根据需要沿第三维堆叠。
  2. 然后玩尺寸以达到所需的形式。
  3. 代码:

    B = mvnrnd(repmat(mu, [r 1]), repmat(sigma, [1 1 r])); %// step 1
    B = permute(reshape(B.', size(mu,2), size(mu,1), r), [2 1 3]);  %'// step 2