Remove repeated numbers in series
Ältere Kommentare anzeigen
Hi everyone,
I have a sequence of number like
x = [3 3 3 3 3 2 2 2 2 2 2 2 1 1 1 1 3 3 3 3 3 3];
And I would like to reduce it to be:
x = [3 2 1 3];
Does anyone know how to do that?
Thanks a lot,
Eric
Antworten (2)
Star Strider
am 7 Apr. 2019
Try this:
x = [3 3 3 3 3 2 2 2 2 2 2 2 1 1 1 1 3 3 3 3 3 3];
dx = diff([0 x]);
fx = find(dx ~= 0);
Result = x(fx)
producing:
Result =
3 2 1 3
Note: This works here, and may not scale up to other problems.
2 Kommentare
Note that this code will not work if the first value happens to be zero. This bug is easy to fix by prepending a logical value after diff (rather than prepending a fake data value before diff). It is also easy get rid of the superfluous find as well:
>> x = [0 0 0 3 3 3 3 3 2 2 2 2 2 2 2 1 1 1 1 3 3 3 3 3 3];
>> y = x([true,diff(x)~=0])
y =
0 3 2 1 3
Star Strider
am 12 Apr. 2019
@Stephen —
Noted. Thank you.
madhan ravi
am 8 Apr. 2019
Bearbeitet: madhan ravi
am 12 Apr. 2019
Try this:
ii = [find(x(1:end-1) ~= x(2:end)) numel(x)];
l = diff([0 ii]); % just as a bonus but can be neglected if your not interested how many times the number appears consecutively
u = x(ii)
2 Kommentare
Stephen23
am 8 Apr. 2019
What is l used for?
madhan ravi
am 8 Apr. 2019
Ah , it’s not needed but it gives the number of consecutive times the number appears in a sequence.
Kategorien
Mehr zu Univariate Discrete Distributions finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!