Matlab 重塑矩阵

Matlab 重塑矩阵,matlab,matrix,reshape,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] 我想做的是重塑这个ie 我想要的是将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] 但是我似乎无法操纵重塑函数来

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

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]
我想做的是重塑这个ie

我想要的是将
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]

但是我似乎无法操纵
重塑
函数来为我做这件事

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

两次重塑和一次置换就可以了(我们先将矩阵拆分并存储在3d中),然后将它们堆叠起来。为了堆叠它们,我们首先需要排列维度(类似于转置)

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

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

循环在Matlab中是邪恶的-他们说。循环确实通常较慢@雷姆斯和兰汀——事实上已经不是这样了。使用JIT编译器,在许多情况下循环(假设预分配)实际上会非常快,有时甚至超过矢量化。
b=zeros(8,2);
for i=1:4,
  b((2*i-1):(2*i),:) = a(:,(2*i-1):(2*i));
end