How to a find the frequency of a point or values?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
If I have a Nx2 vector (in this case, N=20): A =
0 1
0 1
1 0
0 -1
0 -1
-1 0
-1 0
0 1
0 1
1 0
0 -1
0 -1
-1 0
-1 0
0 1
-1 0
1 0
0 -1
0 -1
-1 0
I want to know how many times each unique point (-1,0), (1,0), (0,1), and (0, -1) appears in this vector. For example, the point (-1,0) occurs 6 times. Is there a fast, simple way to do this? Using the find function or a for loop were too cumbersome I thought, but I couldn't find a simple function that would help with this. Is anyone aware of a function, or a simple method to accomplish this? Thanks
0 Kommentare
Antworten (2)
Mahdiyar
am 6 Apr. 2015
Hi
you can download the matlab function named findsubmat from the following link. Then use it for each pair. For example:
B1 = findsubmat(A, [-1 0]);
B2 = findsubmat(A, [1 0]);
B3 = findsubmat(A, [0 1]);
B4 = findsubmat(A, [0 -1]);
Regards,
3 Kommentare
Mahdiyar
am 6 Apr. 2015
Bearbeitet: Mahdiyar
am 6 Apr. 2015
Please follow the code below:
A =[ 0 1
0 1
1 0
0 -1
0 -1
-1 0
-1 0
0 1
0 1
1 0
0 -1
0 -1
-1 0
-1 0
0 1
-1 0
1 0
0 -1
0 -1
-1 0];
D1 = 0; D2 = 0; D3 = 0; D4 =0;
for i=1:size(A,1)
B = A(i,:);
C = B - [-1 0];
NZ = length(find(C==0));
if NZ == 2
D1 = D1 +1;
end
C = B - [1 0];
NZ = length(find(C==0));
if NZ == 2
D2 = D2 +1;
end
C = B - [0 1];
NZ = length(find(C==0));
if NZ == 2
D3 = D3 +1;
end
C = B - [0 -1];
NZ = length(find(C==0));
if NZ == 2
D4 = D4 +1;
end
end
[D1 D2 D3 D4]
Star Strider
am 6 Apr. 2015
This works:
A = [0 1
0 1
1 0
0 -1
0 -1
-1 0
-1 0
0 1
0 1
1 0
0 -1
0 -1
-1 0
-1 0
0 1
-1 0
1 0
0 -1
0 -1
-1 0];
[Au,~,ic] = unique(A,'rows');
k = accumarray(ic,1);
fprintf('\n\tPoints\tFrequency\n')
fprintf('\t%2d %2d\t\t%2d\n', [Au k]')
and produces:
Points Frequency
-1 0 6
0 -1 6
0 1 5
1 0 3
0 Kommentare
Siehe auch
Kategorien
Mehr zu Communications Toolbox finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!