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



我有一个大小为 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

这个问题在某种程度上与之前提出的问题有关,但问题设置不同。我想过一个循环说"从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 数组具有无限数量的尾随单例维度,因此将单例维度移动到末尾与删除它相同。

最新更新