How to sum specific values from a loop and create a new vector?
1 回表示 (過去 30 日間)
古いコメントを表示
If I have this matrix M:
a=1:1:20;
b=[0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 2 0 0];
M=[a,b];
How could I find the i values where M(:,b)>0 (where the second column "b">0), and then take the values of the same row but the first column "a" M(a,:) and make a summation from that row i and i-2, i,e, [i + (i-1)+(i-2)].. like this:
X=[(5+6+7) (12+13+14) (18+17+16)] = [18 39 51]
Besides a vector Y which contains the summation from i-5 until i-3 like this:
Y=[(2+3+4) (9+10+11) (13+14+15)] = [9 30 42]
Both of them for all i values in a vector b of a matrix.
0 件のコメント
採用された回答
Star Strider
2018 年 1 月 23 日
Use bsxfun and sum:
a=1:1:20;
b=[0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 2 0 0];
M=[a(:),b(:)];
idx = find(M(:,2) > 0);
X = sum(bsxfun(@plus, idx, -2:0),2)
Y = sum(bsxfun(@plus, idx, -5:-3),2)
X =
18
39
51
Y =
9
30
42
8 件のコメント
Star Strider
2018 年 1 月 23 日
Thank you!
If you want to have a moving sum for all the rows taken 10 at a time, use the movsum (link) function (introduced in R2016a).
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!