[Numpy-discussion] Unexpected MaskedArray behavior

Jim Vickroy Jim.Vickroy@noaa....
Wed Dec 17 11:13:45 CST 2008

Ryan May wrote:
> Pierre GM wrote:
>> On Dec 16, 2008, at 1:57 PM, Ryan May wrote:
>>> I just noticed the following and I was kind of surprised:
>>>>>> a = ma.MaskedArray([1,2,3,4,5], mask=[False,True,True,False,False])
>>>>>> b = a*5
>>>>>> b
>>> masked_array(data = [5 -- -- 20 25],
>>>       mask = [False  True  True False False],
>>>       fill_value=999999)
>>>>>> b.data
>>> array([ 5, 10, 15, 20, 25])
>>> I was expecting that the underlying data wouldn't get modified while  
>>> masked.  Is
>>> this actual behavior expected?
>> Meh. Masked data shouldn't be trusted anyway, so I guess it doesn't  
>> really matter one way or the other.
>> But I tend to agree, it'd make more sense leave masked data untouched  
>> (or at least, reset them to their original value after the operation),  
>> which would mimic the behavior of gimp/photoshop.
>> Looks like there's a relatively easy fix. I need time to check whether  
>> it doesn't break anything elsewhere, nor that it slows things down too  
>> much. I won't have time to test all that before next week, though. In  
>> any case, that would be for 1.3.x, not for 1.2.x.
>> In the meantime, if you need the functionality, use something like
>> ma.where(a.mask,a,a*5)
> I agree that masked values probably shouldn't be trusted, I was just surprised to 
> see the behavior.  I just assumed that no operations were taking place on masked 
> values.
> Just to clarify what I was doing here: I had a masked array of data, where the 
> mask was set by a variety of different masked values.  Later on in the code, 
> after doing some unit conversions, I went back to look at the raw data to find 
> points that had one particular masked value set.  Instead, I was surprised to see 
> all of the masked values had changed and I could no longer find any of the 
> special values in the data.
> Ryan
Sorry for being dense about this, but I really do not understand why 
masked values should not be trusted.  If I apply a procedure to an array 
with elements designated as untouchable, I would expect that contract to 
be honored.  What am I missing here?

Thanks for your patience!
-- jv
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://projects.scipy.org/pipermail/numpy-discussion/attachments/20081217/e2e1d234/attachment-0001.html 

More information about the Numpy-discussion mailing list