(非重叠移动)向量中每n个元素的平均值

时间:2016-09-22 11:42:18

标签: matlab vector moving-average

我有一个数组(大小为2958 x 1)。我想平均每五个单独的元素启动并将结果存储到一个新数组中。例如:

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

我该怎么做?

1 个答案:

答案 0 :(得分:2)

计算数组中每个n元素平均值的一种方法是使用arrayfun

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

更新

效果更快:

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

区别在于:

------------------- With ARRAYFUN
Elapsed time is 4.474244 seconds.
------------------- With RESHAPE
Elapsed time is 0.013584 seconds.

arrayfun这么慢的原因是我没有正确使用它。 arr(ii:ii + n - 1)在内存中创建一个数组,它会多次发生。另一方面,reshape方法可以无缝地工作。