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



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

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. 在第1维重复mu,在第3维重复sigma,按r的倍数将它们馈送给mvnrnd。这样你就可以得到所需的样本数量,但是r矩阵沿着第一维堆叠,而不是像期望的那样沿着第三维堆叠。
  2. 然后玩尺寸放入所需的形式。
代码:

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

最新更新