[Numpy-discussion] add axis to results of reduction (mean, min, ...)
Keith Goodman
kwgoodman at gmail.com
Mon Aug 10 11:55:22 EDT 2009
On Thu, Aug 6, 2009 at 9:07 AM, Robert Kern<robert.kern at gmail.com> wrote:
> On Thu, Aug 6, 2009 at 11:03, Keith Goodman<kwgoodman at gmail.com> wrote:
>> On Thu, Aug 6, 2009 at 8:55 AM, <josef.pktd at 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?
>>>
>>> Josef
>>>
>>>>>> a
>>> array([[1, 2, 3, 3, 0],
>>> [2, 2, 3, 2, 1]])
>>>>>> a-a.max(0)
>>> array([[-1, 0, 0, 0, -1],
>>> [ 0, 0, 0, -1, 0]])
>>>>>> a-a.max(1)
>>> Traceback (most recent call last):
>>> File "<pyshell#135>", line 1, in <module>
>>> a-a.max(1)
>>> ValueError: shape mismatch: objects cannot be broadcast to a single shape
>>>>>> a-a.max(1)[:,None]
>>> array([[-2, -1, 0, 0, -3],
>>> [-1, -1, 0, -1, -2]])
>>
>> Would this do it?
>>
>>>> pylab.demean??
>> Type: function
>> Base Class: <type 'function'>
>> String Form: <function demean at 0x3c5c050>
>> Namespace: Interactive
>> File: /usr/lib/python2.6/dist-packages/matplotlib/mlab.py
>> Definition: pylab.demean(x, axis=0)
>> Source:
>> def demean(x, axis=0):
>> "Return x minus its mean along the specified axis"
>> x = np.asarray(x)
>> if axis:
>> ind = [slice(None)] * axis
>> ind.append(np.newaxis)
>> return x - x.mean(axis)[ind]
>> return x - x.mean(axis)
>
> Ouch! That doesn't handle axis=-1.
>
> if axis != 0:
> ind = [slice(None)] * x.ndim
> ind[axis] = np.newaxis
Ouch! That doesn't handle axis=None.
if axis:
ind = [slice(None)] * x.ndim
ind[axis] = np.newaxis
More information about the NumPy-Discussion
mailing list