How to find start and end points of non-zero elements in a vector

20 次查看(过去 30 天)
I have some vectors with mostly zeros and a few non-zero values all grouped together (see example plot). I want to know the index for the start and end points of these non-zero areas, i.e. the start and end of the peaks on the plot.
I can use find to get the non-zero areas, then iterate through with a loop to find everywhere the jump in values is greater than 1, but is there a better way to do this?

采纳的回答

Walter Roberson
Walter Roberson 2015-5-12
t = YourVec ~= 0;
findstr([0 t], [0 1])-1 %gives indices of beginning of groups
findstr([t 0], [1 0]) %gives indices of end of groups
  3 个评论
Amrit Zoad
Amrit Zoad 2020-7-17
编辑:Amrit Zoad 2020-7-17
Thanks Walter! I am in a similar situation but I want to find the center value of the non-zero group of points.
Walter Roberson
Walter Roberson 2020-7-17
mask = logical(YourVector(:).'); %(:).' to force row vector
starts = strfind([false, mask], [0 1]);
stops = strfind([mask, false], [1 0]);
centers = mean([starts;stops]);

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Author Block Masks 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by