How to get the starting and ending index of repeated numbers in an array?

조회 수: 20 (최근 30일)
yashvin
yashvin 2015년 6월 22일
댓글: yashvin 2015년 6월 26일
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

채택된 답변

Jan
Jan 2015년 6월 22일
An another question from the forum concerning a run-length-encoding. With FEX: RunLength:
X = [2 2 1 2 3 2 2 2 2 2 3 5 6 7 7 7 7 6 5];
[B, N, Ind] = RunLength(X);
Ind = [Ind, length(X)+1];
Multiple = find(N > 1);
Start = Ind(Multiple);
Stop = Ind(Multiple + 1) - 1;
  댓글 수: 4

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

추가 답변 (3개)

Ingrid
Ingrid 2015년 6월 22일
try using the diff function before calling find
  댓글 수: 4
Stephen23
Stephen23 2015년 6월 22일
편집: Stephen23 2015년 6월 22일
@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
yashvin 2015년 6월 26일
Let me check it and get back to you. Thanks for your input

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


Andrei Bobrov
Andrei Bobrov 2015년 6월 22일
편집: Andrei Bobrov 2015년 6월 22일
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(:)];
  댓글 수: 2
yashvin
yashvin 2015년 6월 26일
I tried your solution. It is working perfectly so far.
yashvin
yashvin 2015년 6월 26일
@ Andrei Bobrov
But i am new to strfind. According to
It looks for pattern and the example in the page treats pattern in string mostly. Can you please a little description of the code you had written. Thanks!

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


Azzi Abdelmalek
Azzi Abdelmalek 2015년 6월 22일
편집: Azzi Abdelmalek 2015년 6월 22일
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];

카테고리

Help CenterFile Exchange에서 String Parsing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by