This is probably easy, but my brain isn't working today...
How can you do the following operation in a vectorized way? I'd think it should be possible with some combination of cumsum, diff & logical indexing:
input = rand(10,1); output = zeros(size(input); output(1) = input(1); for ind = 2:numel(input) dif = input(ind) - input(ind-1); if dif < 0 output(ind) = output(ind-1) + dif; else output(ind) = output(ind-1); end end
outp = cumsum([inp(1);min(diff(inp),0)]);
There may be better ways, but this works:
d = [true;diff(input)<0]; idx = find(d); output = input(idx(cumsum(d)));
When the array is large enough, there's a pretty decent speedup (~50x)