1

我在数组中有数据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;
4

1 回答 1

1

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

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

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

于 2015-04-17T05:36:12.817 回答