57 lines
1.4 KiB
Python
57 lines
1.4 KiB
Python
|
"""
|
||
|
=============
|
||
|
Masked Arrays
|
||
|
=============
|
||
|
|
||
|
Arrays sometimes contain invalid or missing data. When doing operations
|
||
|
on such arrays, we wish to suppress invalid values, which is the purpose masked
|
||
|
arrays fulfill (an example of typical use is given below).
|
||
|
|
||
|
For example, examine the following array:
|
||
|
|
||
|
>>> x = np.array([2, 1, 3, np.nan, 5, 2, 3, np.nan])
|
||
|
|
||
|
When we try to calculate the mean of the data, the result is undetermined:
|
||
|
|
||
|
>>> np.mean(x)
|
||
|
nan
|
||
|
|
||
|
The mean is calculated using roughly ``np.sum(x)/len(x)``, but since
|
||
|
any number added to ``NaN`` [1]_ produces ``NaN``, this doesn't work. Enter
|
||
|
masked arrays:
|
||
|
|
||
|
>>> m = np.ma.masked_array(x, np.isnan(x))
|
||
|
>>> m
|
||
|
masked_array(data = [2.0 1.0 3.0 -- 5.0 2.0 3.0 --],
|
||
|
mask = [False False False True False False False True],
|
||
|
fill_value=1e+20)
|
||
|
|
||
|
Here, we construct a masked array that suppress all ``NaN`` values. We
|
||
|
may now proceed to calculate the mean of the other values:
|
||
|
|
||
|
>>> np.mean(m)
|
||
|
2.6666666666666665
|
||
|
|
||
|
.. [1] Not-a-Number, a floating point value that is the result of an
|
||
|
invalid operation.
|
||
|
|
||
|
.. moduleauthor:: Pierre Gerard-Marchant
|
||
|
.. moduleauthor:: Jarrod Millman
|
||
|
|
||
|
"""
|
||
|
from __future__ import division, absolute_import, print_function
|
||
|
|
||
|
from . import core
|
||
|
from .core import *
|
||
|
|
||
|
from . import extras
|
||
|
from .extras import *
|
||
|
|
||
|
__all__ = ['core', 'extras']
|
||
|
__all__ += core.__all__
|
||
|
__all__ += extras.__all__
|
||
|
|
||
|
from numpy.testing import _numpy_tester
|
||
|
test = _numpy_tester().test
|
||
|
bench = _numpy_tester().bench
|