矩阵

时间:2016-10-28 04:37:32

标签: matlab

如何在不使用循环的情况下从4个矩阵创建元素明智矩阵。对于ex.we有

  

A = [a1 a2; a3 a4] B = [b1 b2; b3 b4] C = [c1 c2; c3 c4] D = [d1 d2; d3 d4]

我们需要创建一个单元格数组,使每个数组位置包含诸如

之类的值
  

[a1 b1; c1 d1]第一个位置的%矩阵

     第二个位置的

[a2 b2; c2 d2]%矩阵

等等,以便涵盖所有元素。

提前致谢。

1 个答案:

答案 0 :(得分:1)

简短版本:

newMatrix= permute(reshape([A(:),B(:),C(:),D(:)]',2,2,4),[2,1,3]);

您需要的矩阵位于newMatrix(:,:,idx)

让我们分解:

temp1 = [A(:),B(:),C(:),D(:)]';

temp1是一个新矩阵,它包含每一行中的所有其他矩阵值以及每列中新矩阵(您想要创建的)所需的值。

temp2 = reshape([A(:),B(:),C(:),D(:)]',2,2,4);

temp2需要temp1并置换它。基本上它将矩阵尺寸从4X4改为2X2X4。如果你看一下这个3D矩阵的每个“层”(沿着第三维),即每2X2它包含你想要转置的信息。剩下要做的就是转置它,这里'不起作用,因为它是一个3D矩阵所以我们使用

newMatrix = permute(temp2,[2,1,3]);

这意味着第三个尺寸相同,但您可以在尺寸1,2之间切换。