我们说A = [1:8; 11:18; 21:28; 31:38; 41:48]
现在我想把第4列以后的所有内容移到行位置。我如何实现这一目标?
A =
1 2 3 4 5 6 7 8
11 12 13 14 15 16 17 18
21 22 23 24 25 26 27 28
31 32 33 34 35 36 37 38
41 42 43 44 45 46 47 48
到
A2 =
1 2 3 4
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
5 6 7 8
15 16 17 18
35 36 37 38
45 46 47 48
reshape
似乎没有做到这一点
答案 0 :(得分:8)
reshape(permute(reshape(a,size(a,1),4,[]),[1,3,2]),[],4)
示例运行 -
>> a
a =
20 79 18 82 27 23 59 66 46 21 48 95
96 83 46 49 34 88 23 42 17 27 15 54
11 88 34 92 23 62 86 56 32 32 91 54
>> reshape(permute(reshape(a,size(a,1),4,[]),[1,3,2]),[],4)
ans =
20 79 18 82
96 83 46 49
11 88 34 92
27 23 59 66
34 88 23 42
23 62 86 56
46 21 48 95
17 27 15 54
32 32 91 54
答案 1 :(得分:3)
B=[A(:,1:4);A(:,5:8)]
循环......
for ii=0:floor(size(A,2)/4)-1
B([1+5*ii:5*(ii+1)],:)=A(:,[1+4*ii:4*(ii+1)] );
end
答案 2 :(得分:2)
还有一个......也许是未优化的方法是将矩阵分解成单元格,然后转换单元格数组,然后将所有内容连接起来:
B = cell2mat(mat2cell(A, size(A, 1), 4 * ones((size(A, 2) / 4), 1)).');
以上首先使用mat2cell
将矩阵分解为非重叠的单元格。每个单元格的行数与A
相同,但列总数为4,其中只有size(A, 2) / 4
。因此,我们需要指示一个向量,其中每个元素为4,并且这些元素中有size(A, 2) / 4
告诉我们每个单元格的列数。这会创建一个行方式的单元格数组,因此我们转置此单元格数组并将所有单元格合并为一个cell2mat
的最终矩阵。