classifying matrix value based on its element

3 views (last 30 days)
BeeTiaw
BeeTiaw on 18 Jul 2018
Edited: Aquatris on 18 Jul 2018
All,
I have the following nx3 matrix. My question is how to classify these matrix based on the value in column 3, i.e. I want to group them based on the value that has similar values in column 3.
Please note that I may have hundreds of matrix similar to this one. I have produced the following code
sig3 = data(:,3);
sig3sort=zeros(length(sig3),1);
for ii=2:length(sig3)
if sig3(ii-1)==sig3(ii)
sig3sort(ii) = nan;
else
sig3sort(ii) = sig3(ii);
end
end
sig3sort = sig3sort(~isnan(sig3sort))
and wondering if someone can make it more elegant?
201 5 5
306 20 5
301 40 5
317 60 5
320 80 5
305 100 5
231 10 10
300 20 10
328 40 10
359 60 10
353 80 10
355 100 10
430 20 20
529 40 20
551 60 20
554 80 20
560 100 20
532 120 20
575 140 20
590 160 20
601 180 20
582 200 20
605 40 40
620 60 40
700 80 40
733 100 40
720 120 40
723 140 40
731 160 40
781 180 40
755 200 40
747 60 60
811 80 60
821 100 60
835 120 60
859 140 60
860 160 60
861 180 60
861 180 60
821 200 60
889 80 80
954 100 80
962 120 80
992 140 80
1003 160 80
1026 180 80
1052 200 80
998 220 80
1005 240 80
956 100 100
975 120 100
1012 140 100
1067 160 100
1089 180 100
1155 200 100
1106 220 100
1098 312 100

Answers (2)

Aquatris
Aquatris on 18 Jul 2018
Is this what you are trying to achieve;
a = [201 5 5
306 20 5
301 40 5
317 60 5
320 80 5
305 100 5
231 10 10
300 20 10
328 40 10
359 60 10
353 80 10
355 100 10
430 20 20
529 40 20
551 60 20
554 80 20
560 100 20
532 120 20
575 140 20
590 160 20
601 180 20
582 200 20
605 40 40
620 60 40
700 80 40
733 100 40
720 120 40
723 140 40
731 160 40
781 180 40
755 200 40
747 60 60
811 80 60
821 100 60
835 120 60
859 140 60
860 160 60
861 180 60
861 180 60
821 200 60
889 80 80
954 100 80
962 120 80
992 140 80
1003 160 80
1026 180 80
1052 200 80
998 220 80
1005 240 80
956 100 100
975 120 100
1012 140 100
1067 160 100
1089 180 100
1155 200 100
1106 220 100
1098 312 100];
checks = unique(a(:,3));
for i = 1:length(checks)
ind{i} = find(a(:,3) == checks(i));
end
group1 = a(ind{1},:);
group2 = a(ind{2},:);
...
  1 Comment
Aquatris
Aquatris on 18 Jul 2018
Edited: Aquatris on 18 Jul 2018
This groups the rows that have the same value at the third column. Alternatively, you can put;
group{i} = a(ind{i},:);
inside the for loop if you want to obtain the groups as a variable.

Sign in to comment.


Image Analyst
Image Analyst on 18 Jul 2018
Have you tried sortrows()?
sig3sorted = sortrows(data, 3);

Categories

Find more on Multidimensional Arrays 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!