Numpy How to make a moving(growing) sum of table contents without a for loop?
Question:
Due to the fact english is not my first language it is very hard to me to explain simply the problem I am trying to solve in the topic, and thus I am sorry.
So instead of trying to explain with bare words I am going to give an example.
Let’s say we have an array that is instantiated like this:
weight = np.arange(1, (n + 1)).astype('float64')
So the array looks like this:
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
Now what I want to do is to have an array of moving sums(let’s call it norm
), summarizing the array norm
and operations would look like this:
index, norm(new array), weight, operation
0 1 1 0+1 = 1
1 3 2 0+1+2 = 3
2 6 3 0+1+2+3 = 6
3 10 4 0+1+2+3+4 = 10
. . . .
. . . .
. . . .
9 55 10 0+1+2+3+...+10 = 55
I hope it is understandable.
How do I achieve this result without looping through the weight array?
Answers:
numpy.cumsum
does exactly this:
np.cumsum(weight)
Due to the fact english is not my first language it is very hard to me to explain simply the problem I am trying to solve in the topic, and thus I am sorry.
So instead of trying to explain with bare words I am going to give an example.
Let’s say we have an array that is instantiated like this:
weight = np.arange(1, (n + 1)).astype('float64')
So the array looks like this:
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
Now what I want to do is to have an array of moving sums(let’s call it norm
), summarizing the array norm
and operations would look like this:
index, norm(new array), weight, operation
0 1 1 0+1 = 1
1 3 2 0+1+2 = 3
2 6 3 0+1+2+3 = 6
3 10 4 0+1+2+3+4 = 10
. . . .
. . . .
. . . .
9 55 10 0+1+2+3+...+10 = 55
I hope it is understandable.
How do I achieve this result without looping through the weight array?
numpy.cumsum
does exactly this:
np.cumsum(weight)