[Numpy-discussion] A reimplementation of MaskedArray

Pierre GM pgmdevlist at gmail.com
Wed Nov 22 01:28:43 CST 2006

> With the new implementation, the data is not shared for any of the 3
> variations above. 

The 'copy=True' in MaskedArray.__new__ ensures that data is always copied by 
default (that's the way I liked it). Most methods that return new masked 
arrays (__getitem__ and __setitem__, for example) do not specifically use a 
particular value of this flag, they just rely on the default, "copy=True" , 
which is "don't share".
Once again, it's not so much because I'm selfish than because I regularly 
forget that data can be shared, and that modifying one array can have 
repercussions on another one the other side of the code.

But there's a quick fix: in the definition of MaskedArray.__new__, just change 
the default copy flag from True to False, that'll work.
Now, Michael, you're right, and it should be the default. I'll fix that.

[Thinking about it, we could store the copy flag in the array, and use that 
value in __getitem__ and __setitem__. That might be overkill, though].

> Unfortunately if the value is changed to masked, this is not updated
> in the parent array. This seems very inconsistent. I don't view masked
> values any different than any other value.

Inconsistent, maybe, useful definitely: 
Masking a view and getting the original masked accordingly could be useful, 
but I strongly feel that unmasking a view and getting an unmasked orginal is 
Besides, in order to make the mask updatable, you need to get it in array 
form, as you suggested in your version of __getitem__. But then, you drag 
this array all along, and I'm not sure it's worthwhile.
All in all, I'd far prefer a status-quo, with unsharable masks.

What does the rest of the list think (er, the MA users) ?

More information about the Numpy-discussion mailing list