[Numpy-discussion] Properties of ma.masked singleton

Alexander Belopolsky alexander.belopolsky at gmail.com
Fri Jan 6 08:27:15 CST 2006


In the current numpy version ma.masked singleton has the following  
properties:

 >>> len(ma.masked)
0

which is a change from old MA, where
 >>> len(MA.masked)
1

Similarly:

 >>> ma.masked.shape
(0,)
 >>> MA.masked.shape
()

It changes shape when filled:

 >>> ma.masked.filled()
array([999999])

and so on.

The code contains numerous "if x is masked" statements to support all  
this logic.

I would like to suggest a somewhat radical change for your review.

There are two main uses of ma.masked:

1. To set mask:

 >>> x = ma.zeros(5)
 >>> x[2:4] = ma.masked
 >>> print x
[0 0 -- -- 0]


2. To check if an element is masked:

 >>> x[2] is ma.masked
True


The second property allows a cute looking idiom "x[i] is masked", but  
only works for single element access:

 >>> x[2:4] is ma.masked
False

It also leads to strange results:

 >>> x[2].shape
(0,)


My proposal is to eliminate the property #2 from ma and redefine  
masked as None. Single element getitem will return a rank zero  
MaskedArray. We can also add "is_masked" property, which will allow a  
convenient check in the form "x[i].is_masked".

The main benefit of this proposal is that x[i] will be duck typing  
compatible with numpy scalars.

-- sasha




More information about the Numpy-discussion mailing list