Rolling max/min maximum and minimum

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]

Antworten (3)

Matt J
Matt J am 27 Nov. 2012
Bearbeitet: Matt J am 27 Nov. 2012

0 Stimmen

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 Kommentar

Chris
Chris am 27 Nov. 2012
Don't have Imagine Processing Toobox unfortunately....

Melden Sie sich an, um zu kommentieren.

Matt J
Matt J am 27 Nov. 2012
Bearbeitet: Matt J am 27 Nov. 2012

0 Stimmen

2 Kommentare

Arthur
Arthur am 27 Nov. 2012
Matt J
Matt J am 27 Nov. 2012
Yes, but it's accordingly not very fast :-(

Melden Sie sich an, um zu kommentieren.

José-Luis
José-Luis am 27 Nov. 2012
Bearbeitet: José-Luis am 27 Nov. 2012

0 Stimmen

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 Kommentar

Matt J
Matt J am 27 Nov. 2012
Bearbeitet: Matt J am 27 Nov. 2012
That's not really vectorized, since we know arrayfun underperforms speed-wise as compared to for-loops.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu MATLAB Mobile Fundamentals finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 27 Nov. 2012

Community Treasure Hunt

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

Start Hunting!

Translated by