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?

Antworten (3)

Daniel Pare
Daniel Pare am 5 Nov. 2019

0 Stimmen

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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

Bruno Luong
Bruno Luong am 3 Aug. 2020
Bearbeitet: Bruno Luong am 16 Dez. 2021

0 Stimmen

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 Kommentare

gummiyummi
gummiyummi am 3 Aug. 2020
I still get the same error...
Bruno Luong
Bruno Luong am 3 Aug. 2020
Bearbeitet: Bruno Luong am 3 Aug. 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 am 15 Dez. 2021
@Bruno can you please tell me what is idx here?
Bruno Luong
Bruno Luong am 16 Dez. 2021
@Ayush Meena it's a typo, should be startidx.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Performance and Memory finden Sie in Hilfe-Center und File Exchange

Produkte

Gefragt:

am 23 Okt. 2018

Kommentiert:

am 16 Dez. 2021

Community Treasure Hunt

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

Start Hunting!

Translated by