Reshape multidimensional matrix by page

Suppose you have a multidimensional array A: 64x64x16. How do you reshape it efficiently so A(:,:,1) to A(:,:,16) are 64x64 blocks that form a new 256x256 matrix?
The desired result (256 x 256) is:
[A(:,:,1) A(:,:,2) A(:,:,3) A(:,:,4); A(:,:,5) A(:,:,6) A(:,:,7) A(:,:,8); A(:,:,9) A(:,:,10) A(:,:,11) A(:,:,12); A(:,:,13) A(:,:,14) A(:,:,15) A(:,:,16)]

2 Kommentare

Nek Valous
Nek Valous am 18 Aug. 2011
Thank you.
Jan
Jan am 18 Aug. 2011
You can edit your original question to insert the missing ")" in the first line.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Jan
Jan am 18 Aug. 2011

2 Stimmen

A = rand(64, 64, 16);
B = reshape(permute(reshape(A, 64, 64*4, 4), [1,3,2]), [256, 256]);
C = [A(:,:,1) A(:,:,2) A(:,:,3) A(:,:,4); ...
A(:,:,5) A(:,:,6) A(:,:,7) A(:,:,8); ...
A(:,:,9) A(:,:,10) A(:,:,11) A(:,:,12); ...
A(:,:,13) A(:,:,14) A(:,:,15) A(:,:,16)];
isequal(B, C)

2 Kommentare

Nek Valous
Nek Valous am 18 Aug. 2011
Thank you! Very elegant!
Jan
Jan am 18 Aug. 2011
You are welcome.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Community Treasure Hunt

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

Start Hunting!

Translated by