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

조회 수: 43 (최근 30일)
shashika iresh
shashika iresh 2016년 10월 3일
댓글: Sylwia Kaduk 2020년 5월 21일
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

답변 (4개)

Massimo Zanetti
Massimo Zanetti 2016년 10월 3일
편집: Massimo Zanetti 2016년 10월 3일
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
shashika iresh
shashika iresh 2016년 10월 3일
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

댓글을 달려면 로그인하십시오.


Andrei Bobrov
Andrei Bobrov 2016년 10월 4일
편집: Andrei Bobrov 2016년 10월 4일
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
Andrei Bobrov
Andrei Bobrov 2016년 10월 13일
Thank you Adrian!
Sylwia Kaduk
Sylwia Kaduk 2020년 5월 21일
Dear Andrei, 4 years later your code is very helpful in part of my PhD. Thanks a lot.

댓글을 달려면 로그인하십시오.


Adrian Stannard
Adrian Stannard 2016년 10월 3일
편집: Adrian Stannard 2016년 10월 4일
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
Guillaume
Guillaume 2016년 10월 4일
편집: Guillaume 2016년 10월 4일
@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 2016년 10월 5일
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

댓글을 달려면 로그인하십시오.


Thorsten
Thorsten 2016년 10월 4일
편집: Thorsten 2016년 10월 4일
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;

카테고리

Help CenterFile Exchange에서 Multidimensional Arrays에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by