Asked by may
on 12 Feb 2013

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

Answer by Azzi Abdelmalek
on 12 Feb 2013

Edited by Azzi Abdelmalek
on 12 Feb 2013

Accepted answer

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,[])

Answer by 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"?

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,[])

Opportunities for recent engineering grads.

## 0 Comments