How to find unique pages in a 3d matrix?
11 views (last 30 days)
Show older comments
If I have 3d matrix like
A = cat(3, [1 2; 3 4], [5 6; 3 4], [5 6; 1 2],[1 2; 3 4])
I want to find unique pages in this matrix so the result should be
result = cat(3, [1 2; 3 4], [5 6; 3 4], [5 6; 1 2])
0 Comments
Accepted Answer
Azzi Abdelmalek
on 12 Feb 2013
Edited: Azzi Abdelmalek
on 12 Feb 2013
A = cat(3, [1 2; 3 4;0 0], [5 6; 3 4; 0 0], [5 6; 1 2;0 0],[1 2; 3 4;0 0])
[n,m,p]=size(A)
a=reshape(A,n,[],1)
b=reshape(a(:),n*m,[])'
c=unique(b,'rows','stable')'
reshape(c,n,m,[])
0 Comments
More Answers (1)
Honglei Chen
on 12 Feb 2013
You can try to reshape it to 2D first, then remove duplicates. For example
A = cat(3, [1 2; 3 4], [5 6; 3 4], [5 6; 1 2],[1 2; 3 4])
Ar = reshape(A,[4 4])
Ar = unique(Ar.','rows','stable').'
reshape(Ar,2,2,[])
I don't quite understand your second question. I think MATLAB automatically removes empty pages. What do you mean by "empty pages"?
3 Comments
Honglei Chen
on 12 Feb 2013
Your version does not support 'stable' option, try the following
A = cat(3, [1 2; 3 4], [5 6; 3 4], [5 6; 1 2],[1 2; 3 4])
Ar = reshape(A,[4 4])
[dummy,idx] = unique(Ar.','rows')
reshape(Ar(:,sort(idx)),2,2,[])
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!