MATLAB Answers

How to sum over rows within specific ranges without for loop?

2 views (last 30 days)
Andy Wu
Andy Wu on 8 Nov 2019
Commented: Andy Wu on 9 Nov 2019
I would like to sum up rows over specific ranges specified by an array. I do not know if there is a vectorised solution to it.
I have a matrix A say
A = [1,0,0,2;
I have an array B specifying the ranges of rows I want to sum up:
B = [2;
B shows that I would like to sum up the first 2 rows, and then the next 1 row, and then the next 2 rows. sum(B) equals to the total number of rows in A.
The output C has the same number of rows as B and the same number of columns as A:
C = [1, 3, 1, 2;
1, 2, 3, 4;
1, 1, 0, 2];
Many thanks!


Sign in to comment.

Accepted Answer

Fabio Freschi
Fabio Freschi on 8 Nov 2019
Edited: Fabio Freschi on 8 Nov 2019
Not sure if it is the best way, but this seems to work
index = [0; cumsum(B)];
C = cell2mat(arrayfun(@(i)sum(A(index(i)+1:index(i+1),:),1),1:length(B),'UniformOutput',false).')

  1 Comment

Andy Wu
Andy Wu on 9 Nov 2019
I see. Thank you, Fabio. Wondering if there is better ways to do it. The run time based on a 1e5 * 100 matrix is similar with using loops.

Sign in to comment.

More Answers (0)

Sign in to answer this question.