在Matlab中随机选择4D矩阵元素

时间:2015-06-20 23:06:20

标签: matlab matrix random 4d

我有一个尺寸为7x4x24x10的4D矩阵(让我们称之为main_mat)。我想得到一个大小为7x4x24(rand_mat)的矩阵,这样这个(rand_mat)矩阵的每个元素实际上都是来自主矩阵(main_mat)的均匀随机抽取。如果我没有清楚地提出问题,我很抱歉,所以我试着解释一下:

我有一堆24张7x4元素,我有10个这样的堆栈。我想要的是,我得到一叠24张7x4元素,这样一来,所得到的单个堆栈中的每个元素都是从10个堆栈中从完全相同的纸张编号中均匀地随机抽取出来的。如何在不使用循环的情况下完成?

2 个答案:

答案 0 :(得分:4)

如果我正确解释你想要的东西,对于这个7 x 4 x 24矩阵中每个独特的3D位置,你要确保我们从共享相同3D空间位置的10个堆栈中的一个中随机抽样

我建议您做的是生成1到10个大小为7 x 4 x 24的随机整数,然后使用sub2indndgrid。您可以在评论中提到amt

我们使用randi生成3D坐标网格,然后使用我们生成的随机整数来访问第四维。鉴于您的4D矩阵存储在ndgrid中,请执行以下操作:

A

请记住,上面的代码适用于任何 4D矩阵。第一行代码在rnd = randi(size(A,4), size(A,1), size(A,2), size(A,3)); [R,C,D] = ndgrid(1:size(A,1), 1:size(A,2), 1:size(A,3)); ind = sub2ind(size(A), R, C, D, rnd); B = A(ind); 之间生成一个7 x 4 x 24的随机整数矩阵。接下来,我们生成一个空间坐标的3D网格,然后使用[1,10]生成列主要索引,我们可以从矩阵sub2ind中采样,其中矩阵的每个唯一3D空间位置{ {1}}只从一个块和一个块中采样。然后,我们使用这些列主要索引从A进行采样,以生成输出矩阵A

答案 1 :(得分:0)

如果不使用循环,此问题可能无法解决。一种可行的方法是:

mainMatrix = ... (7x4x24x10 matrix)
randMatrix = zeros(mainMatrix(:,1,1,1), mainMatrix(1,:,1,1), mainMatrix(1,1,:,1))
for x = 1:length(mainMatrix(:,1,1,1))
  for y = 1:length(mainMatrix(1,:,1,1))
    for z = 1:length(mainMatrix(1,2,:,1))
      randMatrix(x,y,z) = mainMatrix(x,y,z,randi(10))
    end
  end
end