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]

답변 (3개)

Matt J
Matt J 2012년 11월 27일
편집: Matt J 2012년 11월 27일

0 개 추천

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

Chris
Chris 2012년 11월 27일
Don't have Imagine Processing Toobox unfortunately....

댓글을 달려면 로그인하십시오.

Matt J
Matt J 2012년 11월 27일
편집: Matt J 2012년 11월 27일

0 개 추천

댓글 수: 2

Arthur
Arthur 2012년 11월 27일
Matt J
Matt J 2012년 11월 27일
Yes, but it's accordingly not very fast :-(

댓글을 달려면 로그인하십시오.

José-Luis
José-Luis 2012년 11월 27일
편집: José-Luis 2012년 11월 27일

0 개 추천

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

Matt J
Matt J 2012년 11월 27일
편집: Matt J 2012년 11월 27일
That's not really vectorized, since we know arrayfun underperforms speed-wise as compared to for-loops.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 MATLAB Mobile Fundamentals에 대해 자세히 알아보기

태그

질문:

2012년 11월 27일

Community Treasure Hunt

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

Start Hunting!

Translated by