CUMSUM 沿线段中的行 - MATLAB

CUMSUM along rows in segments - MATLAB

我在数组 A = 100 X 612 中有数据。我需要在 12 列段中累加 51 次并将结果存储在新数组 B = 100 X 612 中。最终数组 B 沿着 12 列累积求和,然后再次使用 cumsum 沿着列 13:24 继续,并像这样继续直到结束列 601:612。这在行序列中重复 100 次。

我已经多次尝试使用循环来解决这个问题,但无法得到答案 - 必须有一种更简单的方法来获得解决方案......太依赖循环了!

inx = 1:12:612; %use and index   
for i = 1:100;
    for j = 1:612;
        for k = 1:51;
            B(i,j) = cumsum(A(i,inx(k):inx(k)+11));
        end;
    end;
end;

使用轻量级 reshape and the necessary cumsum -

intv = 12 %// interval or segment length
B = reshape(cumsum(reshape(A,size(A,1),intv,[]),2),size(A))

这里的基本思想是将输入数组重塑为 3D 数组,保持行数相同,并且每行以 intv 长度结束。然后,沿行执行 cumsum,最后重塑回输入数组的大小。