how to count number of repeating's in data series.

44 Ansichten (letzte 30 Tage)
shashika iresh
shashika iresh am 3 Okt. 2016
Kommentiert: Sylwia Kaduk am 21 Mai 2020
for example my matrix A=[22 24 24 36 36 36 48 48 48 48 24 33 22 22]; i need to count how many twos, threes, four time repeating's etc

Antworten (4)

Massimo Zanetti
Massimo Zanetti am 3 Okt. 2016
Bearbeitet: Massimo Zanetti am 3 Okt. 2016
This code
A = [22 24 24 36 36 36 48 48 48 48 24 33 22 22]';
C = accumarray(A,1);
I = unique(A);
counts = [I,C(I)]
returns
out = 22 3
24 3
33 1
36 3
48 4
  1 Kommentar
shashika iresh
shashika iresh am 3 Okt. 2016
no dear, i need to find the repeating(double, triple, four time, etc of same number. for a example above matrix 2 doubles(24 24,22 22),and only 1 triple(36 36 36) ,and only one four times(48 48 48 48). li

Melden Sie sich an, um zu kommentieren.


Andrei Bobrov
Andrei Bobrov am 4 Okt. 2016
Bearbeitet: Andrei Bobrov am 4 Okt. 2016
A=[22 24 24 36 36 36 48 48 48 48 24 33 22 22];
V = A(:);
[~,~,c] = unique(V);
t = diff([0;c])~= 0;
ix = cumsum(t);
out = [V(t),accumarray(ix(:),1)];
out2 = [num2cell((1:max(out(:,2)))'),...
accumarray(out(:,2),out(:,1),[],@(x){sort(x(:)')})];
  3 Kommentare
Andrei Bobrov
Andrei Bobrov am 13 Okt. 2016
Thank you Adrian!
Sylwia Kaduk
Sylwia Kaduk am 21 Mai 2020
Dear Andrei, 4 years later your code is very helpful in part of my PhD. Thanks a lot.

Melden Sie sich an, um zu kommentieren.


Adrian Stannard
Adrian Stannard am 3 Okt. 2016
Bearbeitet: Adrian Stannard am 4 Okt. 2016
I think I understand what you want - it is the successive re-occurrences of a number.
Array=[22 24 24 36 36 36 48 48 48 48 24 33 22 22];
Array(find(diff(Array)==0))
This returns only the repeated elements from the Array after the first occurrence.
You could go further, for example use:
counts=hist(Array(find(diff(Array)==0)))
This gives you the how many times they are repeated. Alternatively:
Array2 = Array(find(diff(Array)==0));
Array3= zeros (size(Array2));
for i = 1:length(Array2)
Array3(i) = sum(Array2==Array2(i));
end
Array3=Array3+1
Array2=Array2([1,diff(Array2)]~=0);
Array3=Array3([1,diff(Array3)]~=0);
will return:
24 36 48 22
2 3 4 2
  5 Kommentare
Guillaume
Guillaume am 4 Okt. 2016
Bearbeitet: Guillaume am 4 Okt. 2016
@Adrian,
Please use the {}Code format button for the code (or just put two spaces before each line) instead of putting blank lines between each line of code.
edit: Thanks!
shashika iresh
shashika iresh am 5 Okt. 2016
please check for this it give wrong answer. A =[24 24 24 24 36 36 36 48 48 48 48 48 48 48 28 24 24 22 22 22 22 22 22 22 22 22 22]; Array2 =
24 36 48 24 22
Array3 =
5 3 7 5 10

Melden Sie sich an, um zu kommentieren.


Thorsten
Thorsten am 4 Okt. 2016
Bearbeitet: Thorsten am 4 Okt. 2016
N(i) is the the number of occurrences of series of i numbers in A:
N = zeros(numel(A), 1);
i = 1;
while(i) < numel(A)
Ni = 1; val = A(i);
while i < numel(A) && A(i+1) == A(i)
i = i + 1; Ni = Ni + 1;
end,
N(Ni) = N(Ni) + 1;
i = i + 1;

Kategorien

Mehr zu Multidimensional Arrays finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by