フィルターのクリア

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

17 ビュー (過去 30 日間)
Miro Mitev
Miro Mitev 2016 年 9 月 1 日
コメント済み: Stephen23 2019 年 9 月 19 日
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

採用された回答

Stephen23
Stephen23 2016 年 9 月 1 日
編集済み: Stephen23 2016 年 9 月 1 日
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 件のコメント
Brian
Brian 2019 年 9 月 18 日
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 2019 年 9 月 19 日
@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

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMultidimensional Arrays についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by