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

조회 수: 4 (최근 30일)
Andy Wu
Andy Wu 2019년 11월 8일
댓글: Andy Wu 2019년 11월 9일
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!

채택된 답변

Fabio Freschi
Fabio Freschi 2019년 11월 8일
편집: Fabio Freschi 2019년 11월 8일
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 2019년 11월 9일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by