总结数字块在matlab的一个向量中

时间:2013-10-04 11:57:55

标签: arrays matlab

我需要在n(在一种情况下为14112)值的向量中对连续的96个值块求和。背景是这些值是15分钟的温度测量,我想一次平均96(1到96,96 + 1到2 * 96 ... n * 96 + 1到(n + 1)* 96)产生每日平均值。这当然可以在循环步进96中完成,但我的问题是在Matlab中是否有更有效的方法来实现这一点。

2 个答案:

答案 0 :(得分:6)

使用reshapemean

data = randn(1,14112); % example data. Row vector
m = 96; % block size. It is assumed that m divides length(data)
result = mean(reshape(data,m,[]));

正如@Dan所指出的,如果元素的数量不是块大小的倍数,则需要一些填充。由于他的原因,下面的代码在最后一个块中进行必要的填充,同时保持该块的平均值。还要感谢@DennisJaheruddin提出的不要修改原始变量的建议:

data = randn(1,14100); % example data. Row vector
m = 96; % block size
n = length(data);
result = mean(reshape([data repmat(mean(data(n-mod(n,m)+1:n)), 1, m - mod(n, m))], m, []));

答案 1 :(得分:2)

这是另一种很好地处理问题的方法,如果数据的长度不是窗口大小的很好的倍数,它也可以工作:

data = randn(1,14112); 
w = 96; 

N = numel(data);
M = NaN(w,ceil(N/w));
M(1:N) = data;
nanmean(M)

如果您不希望在结尾处包含部分日期,请使用fix代替ceil