how remove tow of three consecutive same values in a vector
    7 views (last 30 days)
  
       Show older comments
    
I have two vectors like this
a=[1,2,3,1,1,1,2,3,2,3,1,1,1,1,2,3,3,3,2,2,1],
where * b * is id of * a *
b=[1,2,3,11,12,13,20,21,25,27,31,32,33,34,36,40,41,42,47,48,50]
what i want to achieve is to keep the midle element of three consecutive elements or the even element if te consecuence is more than 3 elements. i want to keep the b[4] or b[11] and b[13] also the b[16]. how to achieve this?? Can any body help?
9 Comments
  Geoff Hayes
      
      
 on 23 Apr 2014
				I don't understand "..but they are not consecutive in b". I thought that it was only the consecutive integers in a that we were concerned with?
Accepted Answer
  Azzi Abdelmalek
      
      
 on 23 Apr 2014
        a = [1,2,3,1,1,1,2,3,2,3,1,1,1,1,2,3,3,3,2,2,1];
b = [1,2,3,11,12,13,20,21,25,27,31,32,33,34,36,40,41,42,47,48,50];
c=diff(a)==0;
ii1=strfind([0 c 0],[0 1  1]);
ii2=strfind([0 c 0],[1 1 0])+1;
out=cell2mat(arrayfun(@(x,y) b(x+1:2:y),ii1,ii2,'un',0))
2 Comments
  the cyclist
      
      
 on 24 Apr 2014
				You did not mention anything about this in your original question. How were we to know this is what you needed?
More Answers (1)
  the cyclist
      
      
 on 23 Apr 2014
        This code is just terrible, but I think it does what you want.
a = [1,2,3,1,1,1,2,3,2,3,1,1,1,1,2,3,3,3,2,2,1];
b = [1,2,3,11,12,13,20,21,25,27,31,32,33,34,36,40,41,42,47,48,50];
d = [];
currentRunLength = 1;
for i = 2:numel(a)
    if a(i)==a(i-1)
        currentRunLength = currentRunLength+1;
        if ((currentRunLength==2) && (i~=numel(a)) && a(i)==a(i+1)) || ((currentRunLength>=4) && mod(currentRunLength,2)==0)
            d = [d,b(i)];
        end
    else
        currentRunLength = 1;
    end
end
3 Comments
  Geoff Hayes
      
      
 on 23 Apr 2014
				My mistake - I had read your a(i)==a(i-1) as ~= and so figured that a final check would be needed.
That being said, is it only the ids of the duplicates that are to be kept (from b) or should it be the ids of the single elements as well?
See Also
Categories
				Find more on Logical in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


