我有一个数组(大小为2958 x 1)。我想平均每五个单独的元素启动并将结果存储到一个新数组中。例如:
arr = (1:10).'; % for this array
avg = [3; 8]; % this should be the result
我该怎么做?
答案 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
方法可以无缝地工作。