Filter löschen
Filter löschen

Simplify large for loop running average.

1 Ansicht (letzte 30 Tage)
curoi am 29 Apr. 2015
Beantwortet: Ken Atwell am 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 );
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.

Antworten (1)

Ken Atwell
Ken Atwell am 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!

Translated by