Ryan May wrote:
> Pierre,
> 
> I know you did some preliminary work on helping to make sure that doing
> operations on masked arrays doesn't change the underlying data.  I ran into 
> the
> following today.
> 
> import numpy as np
> a = np.ma.array([1,2,3], mask=[False, True, False])
> b = a * 10
> c = 10 * a
> print b.data # Prints [10 2 30] Good!
> print c.data # Prints [10 10 30] Oops.
> 
> I tracked it down to __call__ on the _MaskedBinaryOperation class.  If 
> there's a
> mask on the data, you use:
> 
>       result = np.where(m, da, self.f(da, db, *args, **kwargs))
> 
> You can see that if a (and hence da) is a scalar, your masked values end up 
> with
> the value of the scalar.  If this is getting too hairy to handle not touching
> data, I understand.  I just thought I should point out the inconsistency here.

Well, I guess I hit send too soon.  Here's one easy solution (consistent with
what you did for __radd__), change the code for __rmul__ to do:

        return multiply(self, other)

instead of:

        return multiply(other, self)

That fixes it for me, and I don't see how it would break anything.

Ryan

-- 
Ryan May
Graduate Research Assistant
School of Meteorology
University of Oklahoma
_______________________________________________
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to