我有一个40x16矩阵或8个5x16一个低于另一个,即垂直对齐。 我希望得到一个5x128矩阵,这样我就可以水平对齐8个5x16矩阵。 是否有一种有效/更快(而不是硬编码的for循环)方法来做到这一点?
我希望单个5x16矩阵保持完整。
答案 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