Puzzler: Count unique nonzero periods in a timeseries without a for loop

1 view (last 30 days)
given: a signal as a time series
return: discrete number of times is is holds a nonzero position
For example:
given: [0,1,0.5,0.7,0,1]
return: 2
given: [0,1,0,0,0,.3,1,0,0,1]
return: 3
given: [0,1]
return: 1
is there a way to do this task in a vector manner as opposed to a for loop that counts nonzero periods as it encounters them and flicks a counter.

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 19 Jul 2016
Edited: Azzi Abdelmalek on 19 Jul 2016
a=[0,1,0,0,0,.3,1,0,0,1]
out=numel(strfind([0 logical(a)],[0 1]))

More Answers (1)

Image Analyst
Image Analyst on 19 Jul 2016
Yes
[~, numRegions] = bwlabel(yourVector ~= 0);

Categories

Find more on Just for fun in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!