我有一个 40x16 矩阵或 8 个 5x16 一个在另一个下方,即垂直对齐。我想从中得到一个 5x128 矩阵,以便水平对齐 8 个 5x16 矩阵。有没有一种高效/更快(而不是硬编码的 for 循环)的方法来做到这一点?
我希望单个 5x16 矩阵完好无损。
这应该有效。假设您的矩阵是A
(40x16)。
这是一种使用方法reshape
:
m = 5; n = 8; p = 16;
B = reshape(permute(reshape(A', p, m, n), [2 1 3]), m, n*p);
B 将使您的八个 5x16 矩阵彼此相邻,完好无损。
这是一种没有的方法reshape
:
m = 5; n = 8;
B = cell2mat(arrayfun(@(i) A(m*(i-1)+1:m*i, :), 1:n, 'UniformOutput', false));
考虑使用reshape
函数:doc@mathworks。
您可以使用 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×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