[Numpy-discussion] summing over more than one axis

Joe Harrington jh@physics.ucf....
Thu Aug 19 10:29:40 CDT 2010

On Thu, 19 Aug 2010 09:06:32 -0500, G?khan Sever <gokhansever@gmail.com> wrote:

>On Thu, Aug 19, 2010 at 9:01 AM, greg whittier <gregwh@gmail.com> wrote:
>> I frequently deal with 3D data and would like to sum (or find the
>> mean, etc.) over the last two axes.  I.e. sum a[i,j,k] over j and k.
>> I find using .sum() really convenient for 2d arrays but end up
>> reshaping 2d arrays to do this.  I know there has to be a more
>> convenient way.  Here's what I'm doing
>> a = np.arange(27).reshape(3,3,3)
>> # sum over axis 1 and 2
>> result = a.reshape((a.shape[0], a.shape[1]*a.shape[2])).sum(axis=1)
>> Is there a cleaner way to do this?  I'm sure I'm missing something obvious.
>> Thanks,
>> Greg
>Using two sums
>np.sum(np.sum(a, axis=-2), axis=1)

Be careful.  This works for sums, but not for operations like median;
the median of the row medians may not be the global median.  So, you
need to do the medians in one step.  I'm not aware of a method cleaner
than manually reshaping first.  There may also be speed reasons to do
things in one step.  But, two steps may look cleaner in code.


More information about the NumPy-Discussion mailing list