How to sum over rows within specific ranges without for loop?
9 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Andy Wu
am 8 Nov. 2019
Kommentiert: Andy Wu
am 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 Kommentare
Akzeptierte Antwort
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).')
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!