[Numpy-discussion] Fix masked arrays to properly edit views

John Kirkham jakirkham at gmail.com
Sat Mar 14 19:02:51 EDT 2015


The sample case of the issue ( https://github.com/numpy/numpy/issues/5558 ) is shown below. A proposal to address this behavior can be found here ( https://github.com/numpy/numpy/pull/5580 ). Please give me your feedback.


I tried to change the mask of `a` through a subindexed view, but was unable. Using this setup I can reproduce this in the 1.9.1 version of NumPy.

    import numpy as np

    a = np.arange(6).reshape(2,3)
    a = np.ma.masked_array(a, mask=np.ma.getmaskarray(a), shrink=False)

    b = a[1:2,1:2]

    c = np.zeros(b.shape, b.dtype)
    c = np.ma.masked_array(c, mask=np.ma.getmaskarray(c), shrink=False)
    c[:] = np.ma.masked

This yields what one would expect for `a`, `b`, and `c` (seen below).

     masked_array(data =
       [[0 1 2]
        [3 4 5]],
                  mask =
       [[False False False]
        [False False False]],
             fill_value = 999999)

     masked_array(data =
       [[4]],
                  mask =
       [[False]],
             fill_value = 999999)

     masked_array(data =
       [[--]],
                  mask =
       [[ True]],
             fill_value = 999999)

Now, it would seem reasonable that to copy data into `b` from `c` one can use `__setitem__` (seen below).

     b[:] = c

This results in new data and mask for `b`.

     masked_array(data =
       [[--]],
                  mask =
       [[ True]],
             fill_value = 999999)

This should, in turn, change `a`. However, the mask of `a` remains unchanged (seen below).

     masked_array(data =
       [[0 1 2]
        [3 0 5]],
                  mask =
       [[False False False]
        [False False False]],
             fill_value = 999999)



Best,
John
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20150314/c4b5da8f/attachment.html>


More information about the NumPy-Discussion mailing list