我有一个大小为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
此问题与以前提出的question有某种关联,但问题设置不同。我想到了一个循环说'#34;从t=1:p
"表演,但它没有用。
答案 0 :(得分:3)
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数组具有infinite number of trailing singleton dimensions,因此将单个维度移动到末尾与删除它相同。