2015-04-17 62 views
1

我在陣列A = 100 X 612數據。我需要在12支柱區段會逐漸增加51時間和結果存儲在一個新的數組B = 100 X 612。最終陣列B總結累計沿12列,然後再繼續使用cumsum沿13:24列,並繼續下去,直到最終列601:612。這在行序列中重複100次。CUMSUM沿段的行 - MATLAB

我試過這個循環使用多次,但不能得到答案 - 必須有一個更簡單的方法來獲得solution..too依賴於循環!

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

使用輕量級reshape和必要的cumsum -

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

基本思想在這裏重塑輸入數組轉換爲3D陣列保持行相同,並與intv長度結束每一行的數量。然後,沿行執行cumsum,最後重新變形爲輸入數組的大小。

+0

HI-什麼是 「INTV」? – user2100039

+0

@ user2100039用它編輯的意見,希望這些道理。 – Divakar