how to obtain the id of change in vector

1 回表示 (過去 30 日間)
Niraj
Niraj 2012 年 11 月 27 日
i have a vector say
v =[ 0 0 0 0 28 34 0 56 67 0 0 0 69 71 75 89 90 0]
I need to find what are the ids where there is change in value from 0 to some number or from some number to 0. So in this case the ids should be like 5 6 8 9 13 17
Is there a smart way to do it?

回答 (2 件)

Walter Roberson
Walter Roberson 2012 年 11 月 27 日
Lv = (v ~= 0);
find( Lv(1:end-1) ~= Lv(2:end) )
  3 件のコメント
Jan
Jan 2012 年 11 月 27 日
I assume "id" means "index".
Niraj
Niraj 2012 年 11 月 27 日
yes,"id" means "index".

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


Jan
Jan 2012 年 11 月 27 日
編集済み: Jan 2012 年 11 月 27 日
Lv = (v ~= 0);
Index = find(diff(Lv)) + 1;
[EDITED]
Lv = [false, (v ~= 0), false];
ini = strfind(Lv, [false, true]) + 1;
fin = strfind(Lv, [true, false]);
Index = reshape([ini(:), fin(:)], 1, []);
  2 件のコメント
Niraj
Niraj 2012 年 11 月 27 日
編集済み: Niraj 2012 年 11 月 27 日
Thanks for the answer, but it gives the output as
5 7 8 10 13 18
but i want
5 6 8 9 13 17
Jan
Jan 2012 年 11 月 27 日
See [EDITED]

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

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by