Borrar filtros
Borrar filtros

Removing repeated in order elements from array?

5 visualizaciones (últimos 30 días)
Nicholas Kavouris
Nicholas Kavouris el 30 de Mzo. de 2022
Comentada: Voss el 30 de Mzo. de 2022
I have an array like [ 1 1 1 2 2 3 3 3 1 1 1 2 2 4 4 4 5 5 6]
Is there a method which will produce array [ 1 2 3 1 2 4 5 6] and remove all repeating orderly values but not remove all duplicates?
have tried code below with no luck
for k=length(array):-1:1
if array(k)==array(k+1)
array(k)=[]
end
end

Respuestas (2)

Rik
Rik el 30 de Mzo. de 2022
No need for a loop (even if you should have replaced length by numel):
data=[ 1 1 1 2 2 3 3 3 1 1 1 2 2 4 4 4 5 5 6];
L=diff(data)==0; % note: this is 1 element shorter that data itself
data(L)=[]
data = 1×8
1 2 3 1 2 4 5 6

Voss
Voss el 30 de Mzo. de 2022
Your approach will work; you just have to start at the second-to-last element instead of the last:
array = [ 1 1 1 2 2 3 3 3 1 1 1 2 2 4 4 4 5 5 6];
for k=length(array)-1:-1:1
if array(k)==array(k+1)
array(k)=[];
end
end
array
array = 1×8
1 2 3 1 2 4 5 6
Here's another approach:
array = [ 1 1 1 2 2 3 3 3 1 1 1 2 2 4 4 4 5 5 6];
array(diff(array) == 0) = [];
array
array = 1×8
1 2 3 1 2 4 5 6
  3 comentarios
Torsten
Torsten el 30 de Mzo. de 2022
Editada: Torsten el 30 de Mzo. de 2022
Why not ? I get
array = [2]
It's because diff(array) has one element less than array.
Voss
Voss el 30 de Mzo. de 2022
As @Torsten says, it should still work (both ways work):
array = [2 2 2 2 2 2 2];
for k=length(array)-1:-1:1
if array(k)==array(k+1)
array(k)=[];
end
end
array
array = 2
array = [2 2 2 2 2 2 2];
array(diff(array) == 0) = [];
array
array = 2

Iniciar sesión para comentar.

Categorías

Más información sobre Data Type Conversion en Help Center y File Exchange.

Productos


Versión

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by