重塑矩阵

时间:2014-12-18 12:20:25

标签: matlab matrix reshape

我有一个看起来像这样的矩阵:

a=[1   1   2   2   3   3   4   4;
   1.5 1.5 2.5 2.5 3.5 3.5 4.5 4.5]

我想做的是重塑这一点。

我想要的是将2x2矩阵彼此相邻并将它们放在彼此之下。

所以得到:

b=[1     1;
   1.5   1.5;
   2     2;
   2.5   2.5;
   3     3;
   3.5   3.5;
   4     4;
   4.5   4.5]

但我似乎无法操纵reshape函数来为我执行此操作

1 个答案:

答案 0 :(得分:2)

编辑:单行版本可能有点复杂,所以我还根据for循环添加了一个

2个重塑和一个permute应该这样做(我们首先拆分矩阵并将它们存储在3d中),然后堆叠它们。为了堆叠它们,我们首先需要置换尺寸(类似于转置)。

>> reshape(permute(reshape(a,2,2,4),[1 3 2]),8,2)

ans =

    1.0000    1.0000
    1.5000    1.5000
    2.0000    2.0000
    2.5000    2.5000
    3.0000    3.0000
    3.5000    3.5000
    4.0000    4.0000
    4.5000    4.5000

基于for循环的版本更直接。我们创建一个正确大小的空数组,然后分别插入每个2x2矩阵:

b=zeros(8,2);
for i=1:4,
  b((2*i-1):(2*i),:) = a(:,(2*i-1):(2*i));
end