Simplify large for loop running average.

2 views (last 30 days)
curoi
curoi on 29 Apr 2015
Answered: Ken Atwell on 30 Apr 2015
I'm looking to perform a running average of a height dataset based on conditional time criteria.
First I'm trying to find the overall range of indices that I would perform the running average on:
indi = find( time >= time( 1, 1 ) + hintv );
inde = find( time <= time( end, 1 ) - hintv );
A running average would then be calculated for each cell of time over a 25 hour period (12 hours on either side).
for cc = indi( 1, 1 ):1:inde( end, 1 );
fX( cc, 1 ) = nanmean( height( time >= ( time( cc, 1 ) - hintv ) & ...
time <= ( time( cc, 1 ) + hintv ), 1 ) );
fts( cc, 1 ) = time( cc, 1 );
end
Is there a way of achieving this without having to index each selection of heights within a for loop and then average them?
The problem is that the size of the the time and height datasets for which I would like to get averages are very large, 57000 cells. So a for loop takes way too long.

Answers (1)

Ken Atwell
Ken Atwell on 30 Apr 2015
I've used the filter function perform moving average calculations -- seven day data smoothing to remove the effects of weekends in my case. You can find the code toward the end of this blog post.
Hope this helps.

Community Treasure Hunt

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

Start Hunting!