# [Numpy-discussion] add axis to results of reduction (mean, min, ...)

josef.pktd@gmai... josef.pktd@gmai...
Thu Aug 6 12:18:52 CDT 2009

```On Thu, Aug 6, 2009 at 1:07 PM, Keith Goodman<kwgoodman@gmail.com> wrote:
> On Thu, Aug 6, 2009 at 9:58 AM, Charles R
> Harris<charlesr.harris@gmail.com> wrote:
>>
>>
>> On Thu, Aug 6, 2009 at 9:55 AM, <josef.pktd@gmail.com> wrote:
>>>
>>> What's the best way of getting back the correct shape to be able to
>>> broadcast, mean, min,.. to the original array, that works for
>>> arbitrary dimension and axis?
>>>
>>> I thought I have seen some helper functions, but I don't find them
>>> anymore?
>>
>> Adding a keyword to retain the number of dimensions has been mooted. It
>> shouldn't be too difficult to implement and would allow things like:
>>
>>>>> scaled = a/a.max(1, reduce=0)
>>
>> I could do that for 1.4 if folks are interested.
>
> I'd use that. It's better than what I usually do:
>
> scaled = a / a.max(1).reshape(-1,1)
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>

added feature to numpy reduce function would be nice.
but helper function is still useful for our own reduce operations

something like this function with an awful name

Josef

import numpy as np

array

Parameter
---------
x : array n-dim
array that is the result of reduce operation, e.g. mean, min
axis : int
axis that was removed in the reduce operation

Return
------

y : array (n+1)dim

'''
if axis != 0 and not axis is None:
ind = [slice(None)] * (x.ndim+1)
ind[axis] = np.newaxis
return x[ind]
else:
return x

a = np.array([[1,2,3,3,0],[2,2,3,2,1]])
a3 = np.dstack((a,a))

print np.all((a3-a3.mean(1)[:,None,:]) == (a3 - addreducedaxis(a3.mean(1),1)))
print np.all((a3-a3.mean(-2)[:,None,:]) == (a3 -
print np.all((a3-a3.mean()) == (a3 - addreducedaxis(a3.mean())))

print np.all((a3.ravel()-a3.mean(None)) == (a3.ravel() -
print np.all((a3-a3.mean(None)) == (a3 - addreducedaxis(a3.mean(None),None)))

#example usage

from numpy.testing import assert_almost_equal

for axis in [None,0,1,2]:
m = a3.mean(axis)