我有一个大小为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,所以实际上不需要用变量来表达is,但我认为它保持了一些灵活性。
我已经看到了潜在的相关问题(比如向量的部分和),但我不确定这是否会产生所需的输出。
将A
的每个块重新成形为一个矩阵,并计算每个列的和:
result = sum(reshape(A, w, []), 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