我有一个大小为 3780x30974 的矩阵A
。该矩阵由 0
和 1
组成。我想计算长度为 21
(180 块)的固定窗口的总和。应该重申这一点,以便输出返回大小为 180x30974 的向量。
如果列中的前 21 个值的值为 1,则输出应返回 21。但是,如果以下 21 个值再次具有 1 的值,则它也应返回 21。在我的代码中,它会累积值,因此我得到 42。
我有t=3780
,p=180
,w=21
;
B = movsum(A,w); % the sum of a moving window with width w
这个问题在某种程度上与之前提出的问题有关,但问题设置不同。我想过一个循环说"从t=1:p
表演",但它没有用。
result = permute(sum(reshape(A, w, [], size(A,2)), 1), [2 3 1]);
其工作原理如下:将A
重塑为大小为 21
× 180
× 30974
的 3D 数组:
reshape(A, w, [], size(A,2)), 1)
然后沿第一维求和
sum(..., 1)
最后,通过将第一个(单例)维度排列到末尾来删除它:
permute(..., [2 3 1])
请注意,Matlab 数组具有无限数量的尾随单例维度,因此将单例维度移动到末尾与删除它相同。