Borrar filtros
Borrar filtros

How to delete consecutive values in a vector and to save just the biggest one?

6 visualizaciones (últimos 30 días)
I have a vector like: a=[1 2 3 7 10 11 12]. The idea that i want to implement is: if I have consecutive numbers (in this situation) 1 2 3 and 10 11 12 to save just the biggest one and still to not delete the "7". So it should become: a=[3 7 12].
My code (it doesnt work properly and gives me error also):
a=[1 2 3 7 10 11 12]
k=numel(a);
for n=2:k
if a(n)==(a(n-1)+1)
a(n)=[];
end
end

Respuesta aceptada

Stephen23
Stephen23 el 1 de Sept. de 2016
Editada: Stephen23 el 1 de Sept. de 2016
If the sequences are integer and increasing only:
>> a = [1,2,3,7,10,11,12];
>> x = [diff(a)~=1,true];
>> a(x)
ans =
3 7 12
  3 comentarios
Brian
Brian el 18 de Sept. de 2019
If anyone comes across this and is having issues ("horzcat" error) using vertically orientied data as I was, just transpose the array inside of the diff function. For example:
>> a = [1;2;3;7;10;11;12]
>> x = [diff(a')~=1,true];
>> a(x)
ans =
3
7
12
Stephen23
Stephen23 el 19 de Sept. de 2019
@Brian: it is simpler and more efficient to just concatenate along the first dimension:
>> x = [diff(a)~=1;true];
>> a(x)
ans =
3
7
12

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements 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