how to obtain the id of change in vector

2 次查看(过去 30 天)
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
编辑: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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by