From: Tim H. <tim...@ie...> - 2006-10-19 16:52:20
|
Robert Kern wrote: > David Huard wrote: > >> Hi, >> >> Is there an elegant way to reduce an array but conserve the reduced >> dimension ? >> >> Currently, >> >>> a = random.random((10,10,10)) >> >>> a.sum(1).shape >> (10,10) >> >> but i'd like to keep (10,1,10) so I can do a/a.sum(1) directly. >> > > def nonreducing_reducer(reducing_func, arr, axis): > reduced = reducing_func(arr, axis=axis) > shape = list(reduced.shape) > axis = axis % len(arr.shape) > shape.insert(axis, 1) > reduced.shape = tuple(shape) > return reduced > > > I think. > > Alternatively (untested): def nonreducing_reducer(reducing_func, arr, axis): return reducing_func(arr.swapaxis(0, axis), axis=0)[newaxis].swapaxis(0, axis) Adding some vertical whitespace probably wouldn't hurt for readability I suppose. -tim |