Need to remove repeated adjacent elements in an array
Show older comments
I need to turn
[1 1 1 1 2 2 2 6 6 6 6 2 2 2 2] into [1 2 6 2]
unique() gives [1 2 6], but I want to preserve the second value
any advice?
3 Comments
Michael Cappello
on 15 May 2015
x(diff(x)==0) = []
Matthew Rademacher
on 16 May 2015
Ravi Mravi
on 30 Oct 2017
Excellent solution
Accepted Answer
More Answers (2)
Joseph Cheng
on 15 May 2015
Edited: Joseph Cheng
on 15 May 2015
you can use diff to determine the consecutive same value numbers
test = [1 1 1 1 2 2 2 6 6 6 6 2 2 2 2]
mtest = [test test(end)-1];
difftest = diff(mtest)
output = test(difftest~=0)
the mtest is the modified test number to get the last value not the same. if you look at the output of difftest you see that we get the positions of the transitions from one number to another.
Image Analyst
on 15 May 2015
Here's one way:
m = [1 1 1 1 2 2 2 6 6 6 6 2 2 2 2]
logicalIndexes = [0, diff(m)] ~= 0
output = [m(1), m(logicalIndexes)]
Categories
Find more on Programming in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!