Remove repeated numbers in series

2 visualizaciones (últimos 30 días)
Eric
Eric el 7 de Abr. de 2019
Editada: madhan ravi el 12 de Abr. de 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

Respuestas (2)

Star Strider
Star Strider el 7 de Abr. de 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 comentarios
Stephen23
Stephen23 el 8 de Abr. de 2019
Editada: Stephen23 el 8 de Abr. de 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 el 12 de Abr. de 2019
@Stephen —
Noted. Thank you.

Iniciar sesión para comentar.


madhan ravi
madhan ravi el 8 de Abr. de 2019
Editada: madhan ravi el 12 de Abr. de 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 comentarios
Stephen23
Stephen23 el 8 de Abr. de 2019
What is l used for?
madhan ravi
madhan ravi el 8 de Abr. de 2019
Ah , it’s not needed but it gives the number of consecutive times the number appears in a sequence.

Iniciar sesión para comentar.

Categorías

Más información sobre Entering Commands en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by