Rolling max/min maximum and minimum

2 views (last 30 days)
Chris
Chris on 27 Nov 2012
This may have already been asked and aswered, but I couldn't find anything on Matlab Answers or Google. Is there a slick vectorized way to calculate a rolling maximum/minimum for a vector. So the maximum over the previous n values (inclusive of the current value). For indices i < n the value should either be the max of the values with indices 1:i or NaN, I can live with either. So for example:
x = [1, 3, 2, 7, 4, 3]; n = 2;
should give
rollingMax = [NaN, 3, 3, 7, 7, 4] or [1, 3, 3, 7, 7, 4]

Answers (3)

Matt J
Matt J on 27 Nov 2012
Edited: Matt J on 27 Nov 2012
If you have the Image Processing Toolbox, you can use IMDILATE
>> imdilate( [1, 3, 2, 7, 4, 3] ,[1,1])
ans =
1 3 3 7 7 4
  1 Comment
Chris
Chris on 27 Nov 2012
Don't have Imagine Processing Toobox unfortunately....

Sign in to comment.


Matt J
Matt J on 27 Nov 2012
Edited: Matt J on 27 Nov 2012

José-Luis
José-Luis on 27 Nov 2012
Edited: José-Luis on 27 Nov 2012
Without a toolbox:
x = randi(10,1,100);
n = 2;
maxVec = arrayfun(@(a,b) max(x(a:b)),1:numel(x)-n+1,n:numel(x));
  1 Comment
Matt J
Matt J on 27 Nov 2012
Edited: Matt J on 27 Nov 2012
That's not really vectorized, since we know arrayfun underperforms speed-wise as compared to for-loops.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!