0

我有一个A大小为 7812x1 的向量,想计算长度为 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,但我认为它保持了一定的灵活性。

我已经看到可能相关的问题(例如向量的部分总和),但我不确定这是否会产生所需的输出。

4

2 回答 2

3

重新整形为一个矩阵,使每个块A是一列,并计算每个列的总和:

result = sum(reshape(A, w, []), 1);
于 2017-11-06T11:26:08.297 回答
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
于 2017-11-06T11:30:18.177 回答