CUMSUM沿段中的行 - MATLAB

时间:2015-04-17 05:29:54

标签: matlab segments cumsum

我在数组A = 100 X 612中有数据。我需要累计添加12个列段51次,并将结果存储在新数组B = 100 X 612中。最终数组B12列之间累加,然后使用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;

1 个答案:

答案 0 :(得分:1)

使用轻量级reshape和必要的cumsum -

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

这里的基本思想是将输入数组重新整形为3D数组,保持行数相同,每行以intv个长度结束。然后,沿着行执行cumsum,最后重新变换为输入数组的大小。