[Numpy-discussion] return type from ufuncs
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...
More information about the NumPy-Discussion