我在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
)。
答案 0 :(得分:1)
B = reshape(permute(reshape(A,s,m,[]),[1 3 2]),s*r,[])
上面列出的代码基本上有三个步骤,为了更好地理解这个解决方案,下面列出了这些步骤,并希望在reshaping
-
reshape
:在每A
行之后剪切s
,并从中生成3D
数组,使每个3D
切片包含每列A
。permute
:Exchange dim2
和dim3
,以便我们根据需要将dim3
元素更接近dim1
个元素,以便在下一个重新整形根据MATLAB使用的线性索引进行分阶段。reshape
:重塑元素以使它们达到所需的形状(大小)。答案 1 :(得分:0)
您应该使用类似
的内容cat(1,reshape(A(:,1),3,4),reshape(A(:,2),3,4));