MATLAB Answers

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

조회 수: 2(최근 30일)
Andy Wu
Andy Wu 8 Nov 2019
Commented: Andy Wu 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;
0,3,1,0;
1,2,3,4;
0,1,0,1;
1,0,0,1];
I have an array B specifying the ranges of rows I want to sum up:
B = [2;
1;
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!

  댓글 수: 0

로그인 to comment.

채택된 답변

Fabio Freschi
Fabio Freschi 8 Nov 2019
Fabio Freschi 님이 편집함. 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

Andy Wu
Andy Wu 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.

로그인 to comment.

More Answers (0)

이 질문에 답변하려면 로그인을(를) 수행하십시오.


Translated by