[Numpy-discussion] array += masked_array gives a normal array, not masked array

Pierre GM pgmdevlist at gmail.com
Sun Jun 1 21:28:04 EDT 2008


On Sunday 01 June 2008 11:22:05 Tony Yu wrote:
> array + masked_array
> outputs a masked array

That's expected: you create a new object from two objects (array and 
masked_array), the latter has a higher priority than the former, you end up 
with a masked array

> array += masked_array
> outputs an array.

That's expected as well: you modify the values of array in place, but don't 
modify its type. Similarly,
masked_array += array
gives a masked array.

> *However*, if the right side were an old masked array, the masked
> values would not be added to the output array. With the new masked
> arrays, the data from the masked array is added regardless of whether
> the value is masked (example, below).

With oldnumeric.ma, masked_array has to be converted to a ndarray. During the 
conversion, the masked data are filled with a value that depends on the 
context of the call: here, the function called is add, and the corresponding 
filling value is 0. Your line 
normal += masked_array
is then equivalent to
normal += [0,1]

With numpy.ma, masked_array is already recognized as a ndarray, and no 
conversion takes place. In particular, the values of masked_array are not 
filled.

You should use
normal += masked_array.filled(0)




More information about the NumPy-Discussion mailing list