# [Numpy-discussion] summing over more than one axis

josef.pktd@gmai... josef.pktd@gmai...
Thu Aug 19 14:13:16 CDT 2010

```On Thu, Aug 19, 2010 at 11:29 AM, Joe Harrington <jh@physics.ucf.edu> wrote:
> 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.

I think, two .sums() are the most accurate, if precision matters. One
big summation is often not very precise.

Josef

>
> --jh--
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
```