计算数组元素的总和,并在MATLAB中重复整个数组

时间:2017-11-06 11:12:55

标签: arrays matlab loops rolling-sum

我有一个大小为7812x1的向量A,并且想要计算长度为21的固定窗口的总和(所以372个块)。应该重申这一点,以便输出应返回大小为372x1的向量。

我有t=7812p=372w=21;

for t=1:p
   out = sum(A((t*w-w+1):(t*w)));
end

但是,此代码不起作用。我的想法是,((t*w-w+1):(t*w))部分允许像滚动窗口这样的东西。窗口长度为21,所以没有必要表达变量,但我认为它保持一定的灵活性。

我已经看到了潜在的相关问题(这是矢量的部分和),但我不确定这是否会产生所需的输出。

2 个答案:

答案 0 :(得分:3)

重塑为矩阵,以便A的每个块都是一列,并计算每个列的总和:

result = sum(reshape(A, w, []), 1);

答案 1 :(得分:1)

按照您使用滚动/移动窗口的想法(需要Matlab 2016a或更高版本):

t = 7812; w = 21; % your parameters
A = rand(t,1); % generate some test data

B = movsum(A,w); % the sum of a moving window with width w
out = B(ceil(w/2):w:end); % get every w'th element