How to get the starting and ending index of repeated numbers in an array?
Mostrar comentarios más antiguos
Hi MY array is =[2 2 1 2 3 2 2 2 2 2 3 5 6 7 7 7 7 6 5]
I am trying to find the starting and index index of repeated numbers in my array
for example,
for number 2, i expect startingindex=1 and endingindex=2 as it is repeated and also startingindex=6th and endingindex=10.
for number 7, i expect startingindex=14 and endingindex=17
I have been trying using find so far but in vain
Respuesta aceptada
Más respuestas (3)
Ingrid
el 22 de Jun. de 2015
3 votos
try using the diff function before calling find
4 comentarios
yashvin
el 22 de Jun. de 2015
Guillaume
el 22 de Jun. de 2015
diff is going to be the starting point of any answer related to finding repeated sequences. It transforms the repeated sequences into 0 and thus transform the problem from finding transitions between arbitrary numbers into finding transitions from non-zero to zero and back. The latter is much easier to solve.
@yashvin: notice that Ingrid mentioned two functions: diff and find. You only tried the first function, but you missed the find.
>> V = [2 2 1 2 3 2 2 2 2 2 3 5 6 7 7 7 7 6 5];
>> X = diff(V)~=0;
>> B = find([true,X]) % begin of each group
B =
1 3 4 5 6 11 12 13 14 18 19
>> E = find([X,true]) % end of each group
E =
2 3 4 5 10 11 12 13 17 18 19
>> D = 1+E-B % the length of each group
D =
2 1 1 1 5 1 1 1 4 1 1
Use logical indexing if you only want the groups with more than one element:
>> Y = D>1;
>> B(Y)
ans =
1 6 14
>> E(Y)
ans =
2 10 17
yashvin
el 26 de Jun. de 2015
Andrei Bobrov
el 22 de Jun. de 2015
Editada: Andrei Bobrov
el 22 de Jun. de 2015
A=[2 2 1 2 3 2 2 2 2 2 3 5 6 7 7 7 7 6 5];
ii = [0, diff(A(:)')==0,0];
i1 = strfind(ii,[0 1]);
i2 = strfind(ii,[1 0]);
out = [A(i1)',i1(:),i2(:)];
Azzi Abdelmalek
el 22 de Jun. de 2015
Editada: Azzi Abdelmalek
el 22 de Jun. de 2015
A=[2 2 1 2 3 2 2 2 2 2 3 5 6 7 7 7 7 6 5];
d1=~diff(A).*(1:numel(A)-1);
idx1=d1.*[1 ~d1(1:end-1)];
idx2=circshift(d1.*[~d1(2:end) 1],[0 1]);
ii1=~~idx1;
out=[A(ii1);idx1(ii1) ;idx2(~~idx2)+1];
Categorías
Más información sobre Characters and Strings en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!