[英]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.