如何重塑这个例子的matlab矩阵?

时间:2012-06-15 07:32:29

标签: matlab matrix reshape

我有一个40x16矩阵或8个5x16一个低于另一个,即垂直对齐。 我希望得到一个5x128矩阵,这样我就可以水平对齐8个5x16矩阵。 是否有一种有效/更快(而不是硬编码的for循环)方法来做到这一点?

我希望单个5x16矩阵保持完整。

4 个答案:

答案 0 :(得分:1)

这应该有效。假设您的矩阵为A(40x16)。

这是使用reshape的方式:

m = 5; n = 8; p = 16;
B = reshape(permute(reshape(A', p, m, n), [2 1 3]), m, n*p);

B将使您的8个5x16矩阵彼此相邻,完好无损。

这是没有reshape的方式:

m = 5; n = 8;
B = cell2mat(arrayfun(@(i) A(m*(i-1)+1:m*i, :), 1:n, 'UniformOutput', false));

答案 1 :(得分:0)

考虑使用reshape函数:doc@mathworks

答案 2 :(得分:0)

您可以使用MAT2CELL将大矩阵划分为较小的矩阵,然后沿您想要的维度组合:

A = rand(8*5,16);
blkSz = 5;

C = mat2cell(A, blkSz*ones(1,size(A,1)/blkSz), size(A,2));
C = cat(2,C{:})

答案 3 :(得分:0)

将3乘4矩阵重塑为2乘6矩阵。 A =     1 4 7 10     2 5 8 11     3 6 9 12

B =重塑(A,2,6)

B =     1 3 5 7 9 11     2 4 6 8 10 12 B =重塑(A,2,[])

B =     1 3 5 7 9 11     2 4 6 8 10 12