# List Interval Sum

I am doing a large data-set computation. Among those computational steps, in one step I need to do a sum with a pattern: Sum the elements with same interval.

For example, for a list from 1 to 9; With the interval being set to 3 manually. So it could be other values in different cases.

And the list would be calculated as:

1 + 4 + 7 = 12;
2 + 5 + 8 = 15;
3 + 6 + 9 = 18;


So for list = Range[1,9],the final desired result would be {12,15,18} in this example. I attached an illustration for a further elaboration: sum the element with the same color when interval = 3: Thanks for @Chris's Answer, the above case could be solved by:

 Total[Partition[Range, 3]]


Edit my original question from here:

But what I actually want to do is only sum "N" numbers in a time. N is settled and when N = 3 in below example: It should be computed by :

1 + 4 + 7 = 12;
2 + 5 + 8 = 15;
3 + 6 + 9 = 18;
10 + 13 + 16 = 39;
11 + 14 + 17 = 42;
12 + 15 + 18 = 45;


Hereby the result would be {12,15,18,39,42,45}

I think this might be not hard, but I just can't think it very clearly when I want to utilize the parallelization characteristics of MMA and trying to avoid Unpacked Array results.

• is the length of the input list always a multiple of n? If not, what is the desired output for inputs Range and Range? – kglr Dec 5 '18 at 3:09
• The length of list will always be Mod[Length[list],N] = 0, so no worry about corner cases – cj9435042 Dec 5 '18 at 3:13

Total[Partition[Range, 3]]


{12, 15, 18}

Update for revised question:

r = Range

Total /@ Flatten[Partition[#, 3] & /@ {r[[1 ;; ;; 3]], r[[2 ;; ;; 3]], r[[3 ;; ;; 3]]}, 1]

• Hi Chris, sorry I wasn't clarify the problem clearly. I just updated my question would you still interest to help? – cj9435042 Dec 5 '18 at 1:30

Using the six-argument form of Partition:

Join @@ Partition[Partition[Range, 3], 3, 3, {1, 1}, {}, Plus]


{12, 15, 18}

Join @@ Partition[Partition[Range, 3], 3, 3, {1, 1}, {}, Plus]


{12, 15, 18, 39, 42, 45}

More generally,

ClearAll[partsums]
partsums[lst_List, n_Integer] := Join@@Partition[Partition[lst, n], n, n, {1,1}, {}, Plus]


Examples:

partsums[Range, 3]


{12, 15, 18, 39, 42, 45}

Grid[Prepend[Table[{i, Column[i Range], Column[partsums[Range@#, i] & /@
(i Range)]}, {i, {3, 4, 5}}], {"n", "Length@list" , "f[list, n]"}],
Alignment -> Center, Dividers -> All] // TeXForm


$$\small\begin{array}{|c|c|c|} \hline \text{n} & \text{Length@list} & \text{f[list, n]} \\ \hline 3 & \begin{array}{l} 3 \\ 6 \\ 9 \\ 12 \\ 15 \\ 18 \\ 21 \\ \end{array} & \begin{array}{l} \{1,2,3\} \\ \{5,7,9\} \\ \{12,15,18\} \\ \{12,15,18,10,11,12\} \\ \{12,15,18,23,25,27\} \\ \{12,15,18,39,42,45\} \\ \{12,15,18,39,42,45,19,20,21\} \\ \end{array} \\ \hline 4 & \begin{array}{l} 4 \\ 8 \\ 12 \\ 16 \\ 20 \\ 24 \\ 28 \\ \end{array} & \begin{array}{l} \{1,2,3,4\} \\ \{6,8,10,12\} \\ \{15,18,21,24\} \\ \{28,32,36,40\} \\ \{28,32,36,40,17,18,19,20\} \\ \{28,32,36,40,38,40,42,44\} \\ \{28,32,36,40,63,66,69,72\} \\ \end{array} \\ \hline 5 & \begin{array}{l} 5 \\ 10 \\ 15 \\ 20 \\ 25 \\ 30 \\ 35 \\ \end{array} & \begin{array}{l} \{1,2,3,4,5\} \\ \{7,9,11,13,15\} \\ \{18,21,24,27,30\} \\ \{34,38,42,46,50\} \\ \{55,60,65,70,75\} \\ \{55,60,65,70,75,26,27,28,29,30\} \\ \{55,60,65,70,75,57,59,61,63,65\} \\ \end{array} \\ \hline \end{array}$$

Total@Take[Range@9, {#, -1, 3}] & /@ Range@3


{12, 15, 18}

or..

Total /@ Transpose@Partition[Range@9, 3]


{12, 15, 18}