On 2015/03/14 1:02 PM, John Kirkham wrote: > 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) > >
I agree that this behavior is wrong. A related oddity is this: In [24]: a = np.arange(6).reshape(2,3) In [25]: a = np.ma.array(a, mask=np.ma.getmaskarray(a), shrink=False) In [27]: a.sharedmask True In [28]: a.unshare_mask() In [30]: b = a[1:2, 1:2] In [31]: b[:] = np.ma.masked In [32]: b.sharedmask False In [33]: a masked_array(data = [[0 1 2] [3 -- 5]], mask = [[False False False] [False True False]], fill_value = 999999) It looks like the sharedmask property simply is not being set and interpreted correctly--a freshly initialized array has sharedmask True; and after setting it to False, changing the mask of a new view *does* change the mask in the original. Eric > > Best, > John > > > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > http://mail.scipy.org/mailman/listinfo/numpy-discussion > _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion