簡體   English   中英

列的總和以0分隔

[英]Sum parts of a column separated by 0

假設您有一個矩陣,其中:

0 0 0 .... 0
A 0 0 .... 0
B 0 0 .... 0
C 0 0 .... 0
0 0 0 .... 0
D 0 0 .... 0
E 0 0 .... 0

如果我想使用輸出獲取新數組:

[A+B+C   D+E]

你會怎么做? 當然,我總是可以執行循環並檢查0,但我想知道是否還有其他選擇。

使用cumsum生成分組值的向量,然后使用accumarray進行求和:

x = [0; 1; 2; 4; 0; 7; 3];
result = accumarray(cumsum(x==0) + (x(1)~=0), x);

result =
     7
    10

如果x 不能以零開頭,+ (x(1)~=0)是必要的。 這部分確保

x = [1; 2; 4; 0; 7; 3];

結果是期望的

result =
     7
    10

通過上述方法, 每個零將開始一個新組。 因此對於

x = [0; 1; 2; 4; 0; 7; 3; 0; 0; 5; 0];

結果是

result =
     7
    10
     0
     5
     0

如果希望每次運行一個或多個零開始一個新的組:首先在x折疊連續的零,然后應用上面的方法:

x = [0; 1; 2; 4; 0; 7; 3; 0; 0; 5; 0];
ind = [true; x(2:end)~=0 | x(1:end-1)~=0]; % index to remove a zero if preceded by zero
t = x(ind);
result = accumarray(cumsum(t==0) + (x(1)~=0), t);

result =
     7
    10
     5
     0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM