Expanding a 2D matrix to 3D

11 views (last 30 days)
Camille Woicekowski
Camille Woicekowski on 17 Jul 2020
Edited: Matt J on 17 Jul 2020
I have a 2D matrix (3000x22) of True/False values (zeros and ones). Each column contains three True values. I want to make this into a 3D matrix (3000x20x3) where the first new dimmension has the first True value, the second has the second True value, and the third has the third True value. How can I do this?

Accepted Answer

Matt J
Matt J on 17 Jul 2020
Edited: Matt J on 17 Jul 2020
Another way,
C=double(A); %A is the given matrix
C(logical(A))=mod(0:nnz(A)-1,3)+1;
result = cat(3, C==1, C==2, C==3)
  1 Comment
Camille Woicekowski
Camille Woicekowski on 17 Jul 2020
This worked perfectly, thank you!

Sign in to comment.

More Answers (1)

Matt J
Matt J on 17 Jul 2020
Edited: Matt J on 17 Jul 2020
Let's call your given matrix, A,
[m,n]=size(A);
[I,J]=find(A);
K=repmat((1:3).',1,n);
result=accumarray([I,J,K(:)],true,[m,n,3]);

Community Treasure Hunt

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

Start Hunting!