Count all unique elements in a 3d matrix

Hi all,
I have created a 3-d matrix randworld and would like to list the unique elements, count the number of unique elements and count the size of the unique elements for randworld(:,:,1), randworld(:,:,2) and randomworld(:,:,3). e.g. 4, 7, 13 is one unique element in this matrix with size 3.
randworld(:,:,1) =
4 4 3 11 11
4 9 3 9 10
2 7 9 3 9
7 6 6 9 3
4 1 15 15 13
randworld(:,:,2) =
7 7 6 3 3
7 11 6 6 10
11 4 11 9 6
4 15 15 6 9
1 8 5 5 5
randworld(:,:,3) =
13 13 9 4 4
13 11 9 3 6
13 4 11 12 3
4 1 1 3 12
11 5 15 15 15
Any help will be appreciated.
Thanks, Vishal

3 个评论

why 4,7,13 is unique element, what about other numbers?
I do not understand: "4, 7, 13 is one unique element in this matrix with size 3." I see 9 elements of the value 4.
Could you provide a real example for the outputs for a [3x3x3] array?
Sorry, I'll try and make it my question more clear. In the 3-d matrix randworld as listed below, I am trying to find the following:
randworld(:,:,1) =
4 4 3
4 9 3
2 7 9
randworld(:,:,2) =
7 7 6
7 11 6
11 4 11
randworld(:,:,3) =
13 13 9
13 11 9
13 4 11
1. list the unique elements-
4,7,13
2,11,13
9,11,11
7,4,4
3,6,9
9,11,11
2. count the number of unique elements
4,7,13 (count is 3) & 2,11,13 (count is 1) & 9,11,11 (count is 1) & 7,4,4 (count is 1) & 3,6,9 (count is 2)& 9,11,11 (count is 1)

请先登录,再进行评论。

 采纳的回答

a1=randworld(:,:,1)
a2=randworld(:,:,2)
a3=randworld(:,:,3)
v=cell2mat(arrayfun(@(x1,x2,x3) [x1 x2 x3],a1(:),a2(:),a3(:),'un',0));
[a,b,c]=unique(v,'rows','stable')
idx=histc(c,(1:size(a,1))')
% a represent unique vectors
% idx represent the repetition of each vector

4 个评论

works fine. thanks a ton
If that answer solved your problem, be sure to accept it! ;)
Or simply
a1=randworld(:,:,1);
a2=randworld(:,:,2);
a3=randworld(:,:,3);
v1=[a1(:) a2(:) a3(:)];
[a,b,c]=unique(v,'rows','stable')
idx=histc(c,(1:size(a,1))')
Yes, that works fine as well. Just a small typo. In line 4 replace v with v1. Thanks mate.
a1=randworld(:,:,1); a2=randworld(:,:,2); a3=randworld(:,:,3); v1=[a1(:) a2(:) a3(:)]; [a,b,c]=unique(v1,'rows','stable') idx=histc(c,(1:size(a,1))')

请先登录,再进行评论。

更多回答(2 个)

Jan
Jan 2013-8-8
It sounds like a basic task for unique and histc. But currently I do not understand the needs exactly.

1 个评论

I think, he wants to form vectors from each chanel:
vector1= [a(1,1,1) a(1,1,2) a(1,1,3)]
vector2=[a(1,2,1) a(1,2,2) a(1,2,3)]
and so on

请先登录,再进行评论。

Permutation on above...
rpr=permute(r,[1 3 2]);
r2d=rpr(:,:,1);for i=2:size(rpr,3),r2d=[r2d; rpr(:,:,i)];end
u=unique(r2d,'rows','stable');

2 个评论

This solutions works fine if the task is to just list the unique rows. Thanks
Well, one presumes one would use the u as in the previous to determine the rest having found them. Didn't see any point in repeating that.

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Mathematics 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by