MATLAB: Piece-wise linspace

array

Hi
I need to generate a vector (0's and 1's), when I'm given indices for the starting and endpoints of the 1's trains.
Example: m=zeros(1,10); starts=[1 5 9]; ends=[3 6 9];
the generated vector should be [1 1 1 0 1 1 0 0 1 0]
Any way of avoiding a loop? [starts(:):ends(:)] only looks at the first entry of the source vectors…
thanks Tozé

Best Answer

Do the sections overlap? If not, try this:
m = zeros(1, 10);
starts = [1 5 9];
ends = [3 6 9];
m(starts) = 1;
m(ends) = -1;
m = cumsum(m);
If they sections are overlapping:
m = zeros(1, 10);
p = zeros(1, 10);
starts = [1 5 9];
ends = [3 6 9];
m(starts) = 1;
m(ends) = -1;
m = cumsum(m);
p(m > 0) = 1;
I cannot test this currently, so please keep care.
And perhaps this helps: FEX: interval merging.