## Converting 3D matrix to a bigger 2D matrix efficiently

### seb leaf (view profile)

on 30 Oct 2019
Latest activity Edited by seb leaf

on 30 Oct 2019

### Matt J (view profile)

Hello,
Let's say A is a 10x10x4 matrix. A(1,1,:) = a,b,c,d
I want to convert A to B a 20x20 matrix so that: B (1:2,1:2) = [a b;c d];
Is there an efficient way to create the B matrix without using loops?
Cheers!
Edit1: I wrote A as a 10x10x4 matrix, although in reality the matrix's size is around 20 000 x 20 000 x 4.
Edit 2: I reformulated the question:
1. A is a huge M x N x 4 matrix
Example:
A = zeros(M,N,4);
A(1,1,:) = [1 1 2 2];
A(2,1,:) = [3 3 4 4];
A(1,2,:) = [5 5 6 6];
A(2,2,:) = [7 7 8 8];
2. Convert A to a regular 2*M x 2*N matrix so that:
Example:
%Desired output:
B =
1 1 5 5 . .
2 2 6 6 . .
3 3 7 7 . .
4 4 8 8 . .
. . . .
. . . .

Daniel M

### Daniel M (view profile)

on 30 Oct 2019
I don't see the transformation. What happens to elements A(2,1,:) ? What goes in B(1,3:end)?
Nicolas B.

### Nicolas B. (view profile)

on 30 Oct 2019
Have you checked whether the function reshape() could apply to your case?

R2019b

### Matt J (view profile)

on 30 Oct 2019

[ma,na,~]=size(A);
B=permute(reshape(A,ma,na,2,2), [4,1,3,2]);
B=reshape(B,2*ma,2*na)

Walter Roberson

### Walter Roberson (view profile)

on 30 Oct 2019
I have to admit that this is one of those times when a simple for loop can be much clearer.
seb leaf

### seb leaf (view profile)

on 30 Oct 2019
Thank you very much! It's exactly what I wanted.

on 30 Oct 2019
Edited by Matt J

### Matt J (view profile)

on 30 Oct 2019

Is there an efficient way to create the B matrix without using loops?
There is nothing inefficient about using loops in this case. Only 4 loop iterations are required.
B=nan(20);
[k,j]=ind2sub([2,2],1:4);
for i=1:4
B( j(i) + (0:2:end-1), k(i) + (0:2:end-1) )=A(:,:,i);
end

James Tursa

### James Tursa (view profile)

on 30 Oct 2019
Also, since the values are being rearranged in memory, a deep data copy is going to be required no matter which method is used.