How to sum specific values from a loop and create a new vector?
    8 views (last 30 days)
  
       Show older comments
    
    Philippe Corner
 on 23 Jan 2018
  
    
    
    
    
    Commented: Star Strider
      
      
 on 23 Jan 2018
            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 Comments
Accepted Answer
  Star Strider
      
      
 on 23 Jan 2018
        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 Comments
  Star Strider
      
      
 on 23 Jan 2018
				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).
More Answers (0)
See Also
Categories
				Find more on Logical in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!