# Expanding a 2D matrix to 3D

10 views (last 30 days)
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?

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)
Camille Woicekowski on 17 Jul 2020
This worked perfectly, thank you!

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]);

### Categories

Find more on Matrix Indexing in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!