[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.


Nathaniel J. Smith
Postdoctoral researcher - Informatics - University of Edinburgh

More information about the NumPy-Discussion mailing list