How do i count same consecutive occurrences

Consider I have an array of occurrences
A=[1,1,1,1,1,2,2,2,2,3,3,3,3,2,2,2,1,1,1,1]
I want to find out how many 2 are on each occurrence. The answer should be 4 starting 6th position and 3 starting 14 positions.
Is it possible to do it in a wise Matlab way without many loop complications?

Respuestas (3)

Daniel Pare
Daniel Pare el 5 de Nov. de 2019
I wanted to count how many time in a row Head or Tail will occure from a random draw and I came up with this.
Let (x) be your vector of observation like x = [1 1 0 1 0 0 0 1]
The result will be: s = [ 2 1 1 3 1]
s=0 ;
j=2;
i=1;
while i < nb_it+1
c=1;
if i == nb_it
s = [ s c];
break
else
while x(i) == x(i+1)
c = c+1;
i = i+1;
if i == nb_it
break
end
end
end
s = [ s c];
i = i+1;
end
s = s(2:end); % to remove the first zero
sum(s) % the sum should be equal to the number of element in (x)
max(s) % This is the maximum of consecutive ocurence from the draw

5 comentarios

Or you could do:
s = diff([0, find(diff(x)), numel(x)]);
and be done...
Stephen23
Stephen23 el 5 de Nov. de 2019
Editada: Stephen23 el 5 de Nov. de 2019
Or similarly:
>> s = diff(find([1,diff(x),1]))
s =
2 1 1 3 1
Daniel Pare
Daniel Pare el 5 de Nov. de 2019
Awesome, and this way takes way less time than doing many loop.
Thanks
giannit
giannit el 23 de Abr. de 2020
That one line command is amazing, many thanks!
gummiyummi
gummiyummi el 3 de Ag. de 2020
I get an error: Error using horzcat. Dimensions of arrays being concatenated are not consistent.
Can anybody help resolve this?

Iniciar sesión para comentar.

Bruno Luong
Bruno Luong el 3 de Ag. de 2020
Editada: Bruno Luong el 16 de Dic. de 2021
Example:
A=[1,1,1,1,1,2,2,2,2,3,3,3,3,2,2,2,1,1,1,1]
Code
d = diff([0, A==2, 0]);
startidx = find(d==1)
lgt = find(d==-1)-startidx % EDIT error
Result
startidx =
6 14
lgt =
4 3

4 comentarios

gummiyummi
gummiyummi el 3 de Ag. de 2020
I still get the same error...
Bruno Luong
Bruno Luong el 3 de Ag. de 2020
Editada: Bruno Luong el 3 de Ag. de 2020
@As Sc: Can you tell if your A is a row vector? column vector? Something else?
Please type
class(A)
size(A)
then report the result. A is your array.
Ayush Meena
Ayush Meena el 15 de Dic. de 2021
@Bruno can you please tell me what is idx here?
Bruno Luong
Bruno Luong el 16 de Dic. de 2021
@Ayush Meena it's a typo, should be startidx.

Iniciar sesión para comentar.

Categorías

Más información sobre Performance and Memory en Centro de ayuda y File Exchange.

Productos

Etiquetas

Preguntada:

el 23 de Oct. de 2018

Comentada:

el 16 de Dic. de 2021

Community Treasure Hunt

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

Start Hunting!

Translated by