On 19 August 2010 10:01, greg whittier <[email protected]> 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.
Another rank-generic approach is to use apply_over_axes (you get a different shape to the result this way): a = np.random.randint(20, size=(4,3,5)) b = np.apply_over_axes(np.sum, a, [1,2]).flat assert( np.all( b == a.sum(axis=2).sum(axis=1) ) ) > Thanks, > Greg > _______________________________________________ > NumPy-Discussion mailing list > [email protected] > http://mail.scipy.org/mailman/listinfo/numpy-discussion > -- AJC McMorland Post-doctoral research fellow Neurobiology, University of Pittsburgh _______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
