[Numpy-discussion] ndarray**maskedArray with broadcasting bug

Benjamin Root ben.root at ou.edu
Tue Sep 7 17:41:01 EDT 2010


On Fri, Sep 3, 2010 at 3:50 PM, Benjamin Root <ben.root at ou.edu> wrote:

> Here is a fun one...
>
> import numpy as np
>
> a_2d = np.random.random((3, 5))
> b_1d = np.random.random(5)
> b_2d = np.vstack((b_1d, b_1d, b_1d))
>
> a_ma_2d = np.ma.masked_array(a_2d, mask=(numpy.random.random((3, 5)) <
> 0.25))
> b_ma_1d = np.ma.masked_array(b_1d, mask=(numpy.random.random(5) < 0.25))
> b_ma_2d = np.ma.masked_array(b_2d, mask=(numpy.random.random((3, 5)) <
> 0.25))
>
> # a**b                    without broadcasting (works)
> print a_2d**b_2d
>
> # a**b                    with broadcasting (works)
> print a_2d**b_1d
>
> # a_ma**b_ma     without broadcasting (works)
> print a_ma_2d**b_ma_2d
>
> # a_ma**b_ma     with broadcasting (works)
> print a_ma_2d**b_ma_1d
>
> # a**b_ma            without broadcasting (works)
> print a_2d**b_ma_2d
>
> # a**b_ma            with broadcasting (FAILS)
> print a_2d**b_ma_1d
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "/home/bvr/Programs/numpy/numpy/ma/core.py", line 3697, in __rpow__
>     return power(other, self)
>   File "/home/bvr/Programs/numpy/numpy/ma/core.py", line 6043, in power
>     m |= invalid
> ValueError: invalid return array shape
>
> # Now, test broadcasting of the other side of the operator
> c = np.random.random(5)
> c_ma = np.ma.masked_array(c, mask=(np.random.random(10) < 0.25))
>
> # c**b_ma                with broadcasting (works)
> print c**b_ma_2d
>
> # c_ma**b                with broadcasting (FAILS)
> print c_ma**b_2d
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "/home/bvr/Programs/numpy/numpy/ma/core.py", line 3693, in __pow__
>     return power(self, other)
>   File "/home/bvr/Programs/numpy/numpy/ma/core.py", line 6043, in power
>     m |= invalid
> ValueError: invalid return array shape
>
>
> So, this fails if we broadcast the masked array portion of a power
> expression and the other value is a ndarray.
> Note, the same also occurs if we broadcast a masked array in order to raise
> it to powers indicated by an ndarray.
>
> Took me the longest time to nail this one down...
> Ben Root
>


Btw, I have filed a bug report on this:
http://projects.scipy.org/numpy/ticket/1606#comment:1

Ben Root
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20100907/b8dc43a9/attachment.html>


More information about the NumPy-Discussion mailing list