On 4/10/06, Bruce Southey
[...] I think the issue related to how masked values should be handled in computation. Does it matter if the result of an operation is due to a masked value or numerical problem (like dividing by zero)? (I am presuming that it is possible to identify this difference.) If not, then I support the idea of treating masked values as NaN.
IEEE standard prvides plenty of spare bits in NaNs to represent pretty much everything, and some languages take advantage of that feature. (I believe NA and NaN are distinct in R). In MA, however mask elements are boolean and no distinction is made between various reasons for not having a data element. For consistency, a non-trivial (not always false) implementation of ndarray.mask should return "not finite" and ignore bits that distinguish NaNs and infinities.
The functionality provided by na.actions can always be achieved by calling an extra function (filled or compress).
I am not clear on what you actually mean here. For example, if you are summing across a particular dimension, I would presume that any masked value would be ignored an that there would be some record of the fact that a masked value was encountered. This would allow that 'extra function' to handle the associated result. Alternatively the 'extra function' would have to be included as an argument - which is what the na.actions do.
If you sum along a particular dimension and encounter a masked value, the result is masked. The same is true if you encounter a NaN - the result is NaN. If you would like to ignore masked values, you write a.filled(0).sum() instead of a.sum(). In 1d case, you can also use a.compress().sum(). In other words, what in R you achieve with a flag, such as in sum(a, na.rm=TRUE), in numpy you achieve by an explicit call to "fill". This is not quite the same as na.actions in R, but that is what I had in mind.