List Interval Sum
up vote
3
down vote
favorite
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[9], 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.
list-manipulation
add a comment |
up vote
3
down vote
favorite
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[9], 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.
list-manipulation
is the length of the input list always a multiple ofn
? If not, what is the desired output for inputsRange[19]
andRange[20]
?
– kglr
Dec 5 at 3:09
The length of list will always beMod[Length[list],N] = 0
, so no worry about corner cases
– cj9435042
Dec 5 at 3:13
add a comment |
up vote
3
down vote
favorite
up vote
3
down vote
favorite
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[9], 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.
list-manipulation
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[9], 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.
list-manipulation
list-manipulation
edited Dec 5 at 1:29
asked Dec 5 at 0:04
cj9435042
34216
34216
is the length of the input list always a multiple ofn
? If not, what is the desired output for inputsRange[19]
andRange[20]
?
– kglr
Dec 5 at 3:09
The length of list will always beMod[Length[list],N] = 0
, so no worry about corner cases
– cj9435042
Dec 5 at 3:13
add a comment |
is the length of the input list always a multiple ofn
? If not, what is the desired output for inputsRange[19]
andRange[20]
?
– kglr
Dec 5 at 3:09
The length of list will always beMod[Length[list],N] = 0
, so no worry about corner cases
– cj9435042
Dec 5 at 3:13
is the length of the input list always a multiple of
n
? If not, what is the desired output for inputs Range[19]
and Range[20]
?– kglr
Dec 5 at 3:09
is the length of the input list always a multiple of
n
? If not, what is the desired output for inputs Range[19]
and Range[20]
?– kglr
Dec 5 at 3:09
The length of list will always be
Mod[Length[list],N] = 0
, so no worry about corner cases– cj9435042
Dec 5 at 3:13
The length of list will always be
Mod[Length[list],N] = 0
, so no worry about corner cases– cj9435042
Dec 5 at 3:13
add a comment |
3 Answers
3
active
oldest
votes
up vote
4
down vote
Total[Partition[Range[9], 3]]
{12, 15, 18}
Update for revised question:
r = Range[18]
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 at 1:30
add a comment |
up vote
3
down vote
Using the six-argument form of Partition
:
Join @@ Partition[Partition[Range[9], 3], 3, 3, {1, 1}, {}, Plus]
{12, 15, 18}
Join @@ Partition[Partition[Range[18], 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[18], 3]
{12, 15, 18, 39, 42, 45}
Grid[Prepend[Table[{i, Column[i Range[7]], Column[partsums[Range@#, i] & /@
(i Range[7])]}, {i, {3, 4, 5}}], {"n", "Length@list" , "f[list, n]"}],
Alignment -> Center, Dividers -> All] // TeXForm
$smallbegin{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}$
add a comment |
up vote
2
down vote
Total@Take[Range@9, {#, -1, 3}] & /@ Range@3
{12, 15, 18}
or..
Total /@ Transpose@Partition[Range@9, 3]
{12, 15, 18}
add a comment |
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
4
down vote
Total[Partition[Range[9], 3]]
{12, 15, 18}
Update for revised question:
r = Range[18]
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 at 1:30
add a comment |
up vote
4
down vote
Total[Partition[Range[9], 3]]
{12, 15, 18}
Update for revised question:
r = Range[18]
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 at 1:30
add a comment |
up vote
4
down vote
up vote
4
down vote
Total[Partition[Range[9], 3]]
{12, 15, 18}
Update for revised question:
r = Range[18]
Total /@ Flatten[Partition[#, 3] & /@ {r[[1 ;; ;; 3]], r[[2 ;; ;; 3]], r[[3 ;; ;; 3]]}, 1]
Total[Partition[Range[9], 3]]
{12, 15, 18}
Update for revised question:
r = Range[18]
Total /@ Flatten[Partition[#, 3] & /@ {r[[1 ;; ;; 3]], r[[2 ;; ;; 3]], r[[3 ;; ;; 3]]}, 1]
edited Dec 5 at 2:16
answered Dec 5 at 0:10
Chris
54116
54116
Hi Chris, sorry I wasn't clarify the problem clearly. I just updated my question would you still interest to help?
– cj9435042
Dec 5 at 1:30
add a comment |
Hi Chris, sorry I wasn't clarify the problem clearly. I just updated my question would you still interest to help?
– cj9435042
Dec 5 at 1:30
Hi Chris, sorry I wasn't clarify the problem clearly. I just updated my question would you still interest to help?
– cj9435042
Dec 5 at 1:30
Hi Chris, sorry I wasn't clarify the problem clearly. I just updated my question would you still interest to help?
– cj9435042
Dec 5 at 1:30
add a comment |
up vote
3
down vote
Using the six-argument form of Partition
:
Join @@ Partition[Partition[Range[9], 3], 3, 3, {1, 1}, {}, Plus]
{12, 15, 18}
Join @@ Partition[Partition[Range[18], 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[18], 3]
{12, 15, 18, 39, 42, 45}
Grid[Prepend[Table[{i, Column[i Range[7]], Column[partsums[Range@#, i] & /@
(i Range[7])]}, {i, {3, 4, 5}}], {"n", "Length@list" , "f[list, n]"}],
Alignment -> Center, Dividers -> All] // TeXForm
$smallbegin{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}$
add a comment |
up vote
3
down vote
Using the six-argument form of Partition
:
Join @@ Partition[Partition[Range[9], 3], 3, 3, {1, 1}, {}, Plus]
{12, 15, 18}
Join @@ Partition[Partition[Range[18], 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[18], 3]
{12, 15, 18, 39, 42, 45}
Grid[Prepend[Table[{i, Column[i Range[7]], Column[partsums[Range@#, i] & /@
(i Range[7])]}, {i, {3, 4, 5}}], {"n", "Length@list" , "f[list, n]"}],
Alignment -> Center, Dividers -> All] // TeXForm
$smallbegin{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}$
add a comment |
up vote
3
down vote
up vote
3
down vote
Using the six-argument form of Partition
:
Join @@ Partition[Partition[Range[9], 3], 3, 3, {1, 1}, {}, Plus]
{12, 15, 18}
Join @@ Partition[Partition[Range[18], 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[18], 3]
{12, 15, 18, 39, 42, 45}
Grid[Prepend[Table[{i, Column[i Range[7]], Column[partsums[Range@#, i] & /@
(i Range[7])]}, {i, {3, 4, 5}}], {"n", "Length@list" , "f[list, n]"}],
Alignment -> Center, Dividers -> All] // TeXForm
$smallbegin{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}$
Using the six-argument form of Partition
:
Join @@ Partition[Partition[Range[9], 3], 3, 3, {1, 1}, {}, Plus]
{12, 15, 18}
Join @@ Partition[Partition[Range[18], 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[18], 3]
{12, 15, 18, 39, 42, 45}
Grid[Prepend[Table[{i, Column[i Range[7]], Column[partsums[Range@#, i] & /@
(i Range[7])]}, {i, {3, 4, 5}}], {"n", "Length@list" , "f[list, n]"}],
Alignment -> Center, Dividers -> All] // TeXForm
$smallbegin{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}$
edited Dec 5 at 6:33
answered Dec 5 at 4:44
kglr
175k9197402
175k9197402
add a comment |
add a comment |
up vote
2
down vote
Total@Take[Range@9, {#, -1, 3}] & /@ Range@3
{12, 15, 18}
or..
Total /@ Transpose@Partition[Range@9, 3]
{12, 15, 18}
add a comment |
up vote
2
down vote
Total@Take[Range@9, {#, -1, 3}] & /@ Range@3
{12, 15, 18}
or..
Total /@ Transpose@Partition[Range@9, 3]
{12, 15, 18}
add a comment |
up vote
2
down vote
up vote
2
down vote
Total@Take[Range@9, {#, -1, 3}] & /@ Range@3
{12, 15, 18}
or..
Total /@ Transpose@Partition[Range@9, 3]
{12, 15, 18}
Total@Take[Range@9, {#, -1, 3}] & /@ Range@3
{12, 15, 18}
or..
Total /@ Transpose@Partition[Range@9, 3]
{12, 15, 18}
answered Dec 5 at 0:08
J42161217
3,682220
3,682220
add a comment |
add a comment |
Thanks for contributing an answer to Mathematica Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f187334%2flist-interval-sum%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
is the length of the input list always a multiple of
n
? If not, what is the desired output for inputsRange[19]
andRange[20]
?– kglr
Dec 5 at 3:09
The length of list will always be
Mod[Length[list],N] = 0
, so no worry about corner cases– cj9435042
Dec 5 at 3:13