Efficiently converting a 3d matrix to a 2d matrix

Hello,
I would like to convert a 3d matrix into a 2d matrix. I want the 3rd dimension to be concatenated along dimension 1 in the 2d matrix. In the code below, the variable 'desired' illustrates what I want to achieve, but I want to do it more efficiently than via a for a loop. I tried doing the same with reshape (see variable B) but can't get it to produce the output I desire.
A(:,:,1) = ones(2,2);
A(:,:,2) = 2*ones(2,2);
A(:,:,3) = 3*ones(2,2);
desired = [];
for n = 1:size(A,3)
desired = cat(1,desired,A(:,:,n));
end
B = reshape(A,[],size(A,2),1);
Any advice would be much appreciated. Thanks for reading.

 채택된 답변

the cyclist
the cyclist 2011년 3월 21일

33 개 추천

You can permute the 2nd and 3rd dimension before doing the reshape:
>> C = permute(A,[1 3 2]);
>> C = reshape(C,[],size(A,2),1)

댓글 수: 9

Elegant!
converting 3D to 2D matrix row wise
Thank you! Excelent!
Thanks a bunch this is so elegant!
Zoe
Zoe 2018년 2월 24일
Save my life!
mine too! Thank you.
Linjun He
Linjun He 2018년 12월 25일
Thank you!!!
Thank you.
Sem Diaz
Sem Diaz 2019년 12월 4일
How can you convert it back?

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Andrew Newell
Andrew Newell 2011년 3월 21일

5 개 추천

You can do it with cell arrays:
Acell = num2cell(A,[1 2]); % put each page of A into a cell
Acell = reshape(Acell,size(A,3),1); %make the cell array a vector
desired = cell2mat(Acell);
EDIT: the solution by @the cyclist is nicer for this particular problem, but be careful about generalizing it. For example, suppose you want to pack your matrices into a 2x2 array:
A(:,:,1) = ones(2,2);
A(:,:,2) = 2*ones(2,2);
A(:,:,3) = 3*ones(2,2);
A(:,:,4) = 4*ones(2,2);
Acell = num2cell(A,[1 2]);
Acell = reshape(Acell,2,2);
desired = cell2mat(Acell)
desired =
1 1 3 3
1 1 3 3
2 2 4 4
2 2 4 4
C = permute(A,[1 3 2]);
C = reshape(C,[],4,1)
C =
1 3 1 3
1 3 1 3
2 4 2 4
2 4 2 4
Omar Mian
Omar Mian 2011년 3월 21일

1 개 추천

Thank you Andrew & cyclist,
Both solutions work. Cyclist's permute solution is more efficient, taking approx approx 17% of the time used by the cell array solution.

카테고리

도움말 센터File Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

제품

질문:

2011년 3월 21일

댓글:

2019년 12월 4일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by