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

9 Ansichten (letzte 30 Tage)
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!

Akzeptierte Antwort

Fabio Freschi
Fabio Freschi am 8 Nov. 2019
Bearbeitet: Fabio Freschi am 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 Kommentar
Andy Wu
Andy Wu am 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by