重塑矩阵从3d到2d保持行

时间:2011-12-28 12:23:15

标签: performance matlab indexing reshape

我正在将3d矩阵转换为2d矩阵。这是形状变换:[n x m x o] - > [n * o x m]。

矩阵的元素与行有关。因此,需要在结果矩阵中具有相同的行。

A = rand(2,2,3);

这样做:

C = reshape(A, 2*3, 2);

没有将行保留在A中。

所以我这样做:

B = zeros(size(A,1)*size(A,3),size(A,2));
first_indice = 1;
for i = 1:size(A,3)
    B(first_indice:size(A,1)*i,:)=A(:,:,i);
    first_indice = first_indice + size(A,1);
end

是否有更有效的方式可能使用重塑?

非常感谢!

1 个答案:

答案 0 :(得分:4)

reshape结合从第一维开始的矩阵元素。因此,解决方案是在重塑之前对尺寸进行置换。在你的情况下,它应该如下:

% A is the input matrix of dimensions (n x m x o).
B = ipermute(A, [1 3 2]);
C = reshape(B, n*o, m);