累积数组元素的值,并在MATLAB中重复整个数组

时间:2017-11-06 16:41:37

标签: arrays matlab loops matrix

我有一个大小为3780x30974的矩阵A。此矩阵由01组成。我想计算长度21(180块)的固定窗口的总和。应该重申这一点,以便输出返回大小为180x30974的向量。

如果列中的前21个值的值为1,则输出应返回21.但是,如果以下21个值的值再次为1,则它也应返回21。在我的代码中,它累积了值,所以我得到了42.

我有t=3780p=180w=21;

B = movsum(A,w); % the sum of a moving window with width w

此问题与以前提出的question有某种关联,但问题设置不同。我想到了一个循环说'#34;从t=1:p"表演,但它没有用。

1 个答案:

答案 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,因此将单个维度移动到末尾与删除它相同。