我有一个大小为7812x1的向量A
,并且想要计算长度为21的固定窗口的总和(所以372个块)。应该重申这一点,以便输出应返回大小为372x1的向量。
我有t=7812
,p=372
,w=21
;
for t=1:p
out = sum(A((t*w-w+1):(t*w)));
end
但是,此代码不起作用。我的想法是,((t*w-w+1):(t*w))
部分允许像滚动窗口这样的东西。窗口长度为21,所以没有必要表达变量,但我认为它保持一定的灵活性。
我已经看到了潜在的相关问题(这是矢量的部分和),但我不确定这是否会产生所需的输出。
答案 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