How to get the cumulative sum of numpy array in-place
Asked Answered
H

2

9

I want to compute the integral image. for example

a=array([(1,2,3),(4,5,6)])
b = a.cumsum(axis=0)

This will generate another array b.Can I execute the cumsum in-place. If not . Are there any other methods to do that

Hippocrene answered 28/8, 2013 at 13:11 Comment(1)
I am not sure what output value you expect if not an array. Could you please precise?Shira
C
11

You have to pass the argument out:

np.cumsum(a, axis=1, out=a)

OBS: your array is actually a 2-D array, so you can use axis=0 to sum along the rows and axis=1 to sum along the columns.

Cosmetician answered 28/8, 2013 at 13:20 Comment(5)
Is this the same to a=np.cumsum(a,axis=1). How can I confirm the a is the original oneHippocrene
@Hippocrene in the documentation it states that this function returns a new array, but I don't know how to check if it is the same object, for other objects we could use hash(), but np.ndarrays are unhashable...Cosmetician
It can be confirmed by the address of a.data. I have confirmed that it's in-place in your way thanksHippocrene
@Hippocrene good to know this... I've been using .data in Cython but I never thought of using it for other purposesCosmetician
@Hippocrene - Don't use a.data for this. It will only work in a very limited number of cases (e.g. what you're doing where the same array is returned, instead of a new array that shares the same data). Use numpy.may_share_memory instead.Hearten
S
-3

Try this using numpy directly numpy.cumsum(a) :

a=array([(1,2,3)])
b = np.cumsum(a)
print b
>>array([1,3,6]) 
Sudatorium answered 28/8, 2013 at 13:20 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.