[Numpy-discussion] return type from ufuncs

Nathaniel Smith njs at pobox.com
Thu Nov 20 19:09:51 EST 2014


On Thu, Nov 20, 2014 at 5:47 PM, Marek Wojciechowski <mwojc at p.lodz.pl> wrote:
> 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.

-n

-- 
Nathaniel J. Smith
Postdoctoral researcher - Informatics - University of Edinburgh
http://vorpus.org



More information about the NumPy-Discussion mailing list