54 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			54 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 . import core, extras
							 | 
						||
| 
								 | 
							
								from .core import *
							 | 
						||
| 
								 | 
							
								from .extras import *
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__all__ = ['core', 'extras']
							 | 
						||
| 
								 | 
							
								__all__ += core.__all__
							 | 
						||
| 
								 | 
							
								__all__ += extras.__all__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from numpy._pytesttester import PytestTester
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test = PytestTester(__name__)
							 | 
						||
| 
								 | 
							
								del PytestTester
							 |