Remove repeated numbers in series

2 visualizzazioni (ultimi 30 giorni)
Eric
Eric il 7 Apr 2019
Modificato: madhan ravi il 12 Apr 2019
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

Risposte (2)

Star Strider
Star Strider il 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 Commenti
Stephen23
Stephen23 il 8 Apr 2019
Modificato: Stephen23 il 8 Apr 2019
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
Star Strider il 12 Apr 2019
@Stephen —
Noted. Thank you.

Accedi per commentare.


madhan ravi
madhan ravi il 8 Apr 2019
Modificato: madhan ravi il 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 Commenti
Stephen23
Stephen23 il 8 Apr 2019
What is l used for?
madhan ravi
madhan ravi il 8 Apr 2019
Ah , it’s not needed but it gives the number of consecutive times the number appears in a sequence.

Accedi per commentare.

Categorie

Scopri di più su Entering Commands in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by