matlab - (non-overlapping moving) Average of every n element in a vector -


this question has answer here:

i have array (of size 2958 x 1). want average every 5 separate element starting , store result new array. example:

arr = (1:10).'; % array avg = [3; 8]; % should result 

how can this?

one way calculate average of every n element in array using arrayfun:

n = 5; arr = rand(2958,1); % array avg = arrayfun(@(ii) mean(arr(ii:ii + n - 1)), 1:n:length(arr) - n + 1)'; 

update:

this works faster:

avg = mean(reshape(arr(1:n * floor(numel(arr) / n)), [], n), 2); 

the difference big:

------------------- arrayfun elapsed time 4.474244 seconds. ------------------- reshape elapsed time 0.013584 seconds. 

the reason arrayfun being slow here not using properly. arr(ii:ii + n - 1) creates array in memory , happens many times. reshape approach on other hand works seamlessly should.


Comments

Popular posts from this blog

angular - Is it possible to get native element for formControl? -

unity3d - Rotate an object to face an opposite direction -

javascript - Why jQuery Select box change event is now working? -