[Numpy-discussion] return type from ufuncs

Marek Wojciechowski mwojc at p.lodz.pl
Fri Nov 21 04:49:39 EST 2014

Dnia piątek, 21 listopada 2014 00:09:51 Nathaniel Smith pisze:
> On Thu, Nov 20, 2014 at 5:47 PM, Marek Wojciechowski <mwojc at p.lodz.pl> 
> > Hi!
> > 
> > I wrote a simple subclass of np.ndarray and now i do call np.sum() on it.
> > I
> > expected that the result will be a python float (or int) just like when
> > summing up regular arrays. Instead i obtain the (scalar) view of my
> > subclass. How can i change this behavior? I tried writing __array_wrap__
> > method like this:> 
> > def __array_wrap__(self, out_arr, context=None):
> >         selfv = self.view(np.ndarray)
> >         return np.ndarray.__array_wrap__(selfv, out_arr, context)
> > 
> > but this just returns np.ndarray type and not float.
> There isn't really any reason to call __array_wrap__ here. Just
> compute whatever value you want and return it. If you want a float
> then return that :-).  (Something like
>   if selfv.ndim == 0:
>       return selfv[()]
> )
> As a bit of advice, if you can possibly avoid subclassing ndarray,
> then you probably should. There are a lot of painful little quirks
> that you'll run into.

Thanks for the answer. I thought similar, but the 'context' argument confused 
me a bit. I do not know what for it is here.

Thanks also for the (reasonable) advice. Subclassing was just the fastest way 
to implement what i wanted to do, because of all these methods being on place. 
However i do see now, that that was not necessarily the best choice...

Marek Wojciechowski 

More information about the NumPy-Discussion mailing list