[Numpy-discussion] return type from ufuncs

Marek Wojciechowski mwojc at p.lodz.pl
Thu Nov 27 04:00:01 EST 2014

Dnia czwartek, 20 listopada 2014 18:47:41 Marek Wojciechowski pisze:
> 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.


I'm back with the problem of returning types form ndarray subclasses, now with 
ravelling the array. I wrote the __array_wrap__ function like this:

def __array_wrap__(self, out_arr, context=None):
    arr = out_arr.view(np.ndarray)
    if arr.ndim == 0:
        arr = arr[()]
    return arr

I was convinced that now ufuncs wil return always numpy arrays. But now i 
discovered that for example:


returns still the subclass type, not ndarray type. Ravel method apparently 
does not call __array_wrap__ (whereas np.ravel(a) does!). Is there a 
systematic way to resolve this or i need to write new ravel method?

Marek Wojciechowski 

More information about the NumPy-Discussion mailing list