MATLAB: Sum of rows with whose row numbers are specified by another array

adding rowssumsumming

I have an array of the form:
TTX =
20 9 2 7
40 10 10 1
60 2 10 9
0 10 5 10
40 7 9 7
40 1 2 8
0 3 5 8
60 6 10 4
20 10 8 7
0 10 10 2
I want to add the elements of rows 1:3, then add the elements of the rows 4:5, then 6:end.
How can I do that?

Best Answer

  • From R2015b you can use splitapply:
    >> TTX = [...
    20 9 2 7
    40 10 10 1
    60 2 10 9
    0 10 5 10
    40 7 9 7
    40 1 2 8
    0 3 5 8
    60 6 10 4
    20 10 8 7
    0 10 10 2];
    >> [U,~,X] = unique(TTX(:,1));
    >> Y = splitapply(@(x)sum(x,1),TTX(:,2:4),X);
    >> M = [U,Y]
    M =
    0 23 20 20
    20 19 10 14
    40 18 21 16
    60 8 20 13
    EDIT: this matches the original question's output explanation and example.