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

25 visualizaciones (últimos 30 días)
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?

Respuesta aceptada

Walter Roberson
Walter Roberson el 12 de Mayo de 2015
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 comentarios
Amrit Zoad
Amrit Zoad el 17 de Jul. de 2020
Editada: Amrit Zoad el 17 de Jul. de 2020
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 el 17 de Jul. de 2020
mask = logical(YourVector(:).'); %(:).' to force row vector
starts = strfind([false, mask], [0 1]);
stops = strfind([mask, false], [1 0]);
centers = mean([starts;stops]);

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Author Block Masks en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by