Effacer les filtres
Effacer les filtres

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

6 vues (au cours des 30 derniers jours)
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

Réponse acceptée

Stephen23
Stephen23 le 1 Sep 2016
Modifié(e) : Stephen23 le 1 Sep 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 commentaires
Brian
Brian le 18 Sep 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 le 19 Sep 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

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by