[Numpy-discussion] question about ufuncs
Pierre GM
pgmdevlist@gmail....
Fri Feb 6 16:18:39 CST 2009
On Feb 6, 2009, at 4:25 PM, Darren Dale wrote:
>
> I've been looking at how ma implements things like multiply() and
> MaskedArray.__mul__. I'm surprised that MaskedArray.__mul__ actually
> calls ma.multiply() rather than calling
> super(MaskedArray,self).__mul__().
There's some under-the-hood machinery to deal with the data, and we
need to be able to manipulate it *before* the operation takes place.
The super() approach calls __array_wrap__ on the result, so *after*
the operation took place, and that's not what we wanted...
> Maybe that is the way ndarray does it, but I don't think this is the
> right approach for my quantity subclasses. If I want to make a
> MaskedQuantity (someday), MaskedQuantity.__mul__ should be calling
> super(MaskedQuantity,self).__mul__(), not reimplementations of
> numpy.multiply or ma.multiply, right?
You'll end up calling ma.multiply anyway
(super(MaskedQuantity,self).__mul__ will call MaskedArray.__mul__
which calls ma.multiply... So yes, I think you can stick to the
super() approach in your case
>
> There are some cases where the default numpy function expects
> certain units on the way in, like the trig functions, which I think
> would have to be reimplemented.
And you can probably define a generic class to deal with that instead
of reimplementing the functions individually (and we're back to the
initial advice).
> But aside from that, is there anything wrong with taking this
> approach? It seems to allow quantities to integrate pretty well with
> the numpy builtins.
Go and try, the problems (if any) will show up...
More information about the Numpy-discussion
mailing list