如何在对其中的某些部分进行矢量化后重新整形Matlab中的矩阵?

时间:2014-11-27 15:19:05

标签: matlab matrix reshape

我在Matlab中有一个矩阵A

m=4;
s=3;
r=2;
A=[1 2;
   3 4; 
   5 6; 
   7 8; 
   9 10; 
  11 12; 
  13 14; 
  15 16; 
  17 18; 
  19 20; 
  21 22; 
  23 24]; %// (m*s) x r

并希望获得矩阵

B=[1 7 13 19; 
   3 9 15 21; 
   5 11 17 23; 
   2 8 14 20; 
   4 10 16 22; 
   6 12 18 24];   %// (s*r) x m

不使用单元格(例如mat2cell)。

2 个答案:

答案 0 :(得分:1)

代码

B = reshape(permute(reshape(A,s,m,[]),[1 3 2]),s*r,[])

一些解释

上面列出的代码基本上有三个步骤,为了更好地理解这个解决方案,下面列出了这些步骤,并希望在reshaping -

上指导您将来的查询
  1. 使用最里面的reshape:在每A行之后剪切s,并从中生成3D数组,使每个3D切片包含每列A
  2. 只使用permute:Exchange dim2dim3,以便我们根据需要将dim3元素更接近dim1个元素,以便在下一个重新整形根据MATLAB使用的线性索引进行分阶段。
  3. 使用最外面的reshape:重塑元素以使它们达到所需的形状(大小)。

答案 1 :(得分:0)

您应该使用类似

的内容
cat(1,reshape(A(:,1),3,4),reshape(A(:,2),3,4));