From: <as...@us...> - 2008-07-18 23:15:40
|
Revision: 5791 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5791&view=rev Author: astraw Date: 2008-07-18 23:15:37 +0000 (Fri, 18 Jul 2008) Log Message: ----------- Check for nan and inf in axes.delete_masked_points(). Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/axes.py Added Paths: ----------- trunk/matplotlib/unit/axes_unit.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2008-07-18 20:43:58 UTC (rev 5790) +++ trunk/matplotlib/CHANGELOG 2008-07-18 23:15:37 UTC (rev 5791) @@ -1,3 +1,6 @@ +2008-07-18 Check for nan and inf in axes.delete_masked_points(). + This should help hexbin and scatter deal with nans. - ADS + 2008-07-17 Added ability to manually select contour label locations. Also added a waitforbuttonpress function. - DMK Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2008-07-18 20:43:58 UTC (rev 5790) +++ trunk/matplotlib/lib/matplotlib/axes.py 2008-07-18 23:15:37 UTC (rev 5791) @@ -1,5 +1,5 @@ from __future__ import division, generators -import math, sys, warnings, datetime, new +import math, sys, warnings, datetime, new, types import numpy as np from numpy import ma @@ -36,6 +36,8 @@ Find all masked points in a set of arguments, and return the arguments with only the unmasked points remaining. + This will also delete any points that are not finite (nan or inf). + The overall mask is calculated from any masks that are present. If a mask is found, any argument that does not have the same dimensions is left unchanged; therefore the argument list may @@ -49,9 +51,11 @@ useful. """ masks = [ma.getmaskarray(x) for x in args if hasattr(x, 'mask')] + isfinite = [np.isfinite(x) for x in args] + masks.extend( [~x for x in isfinite if not isinstance(x,types.NotImplementedType)] ) if len(masks) == 0: return args - mask = reduce(ma.mask_or, masks) + mask = reduce(np.logical_or, masks) margs = [] for x in args: if (not is_string_like(x) Added: trunk/matplotlib/unit/axes_unit.py =================================================================== --- trunk/matplotlib/unit/axes_unit.py (rev 0) +++ trunk/matplotlib/unit/axes_unit.py 2008-07-18 23:15:37 UTC (rev 5791) @@ -0,0 +1,62 @@ +import unittest +import numpy as np +import matplotlib.axes as axes + +class TestAxes(unittest.TestCase): + def test_delete_masked_points_arrays(self): + input = ( [1,2,3,np.nan,5], + np.array((1,2,3,4,5)), + ) + expected = [np.array((1,2,3,5))]*2 + actual = axes.delete_masked_points(*input) + assert np.allclose(actual, expected) + + input = ( np.ma.array( [1,2,3,4,5], mask=[False,False,False,True,False] ), + np.array((1,2,3,4,5)), + ) + expected = [np.array((1,2,3,5))]*2 + actual = axes.delete_masked_points(*input) + assert np.allclose(actual, expected) + + input = ( [1,2,3,np.nan,5], + np.ma.array( [1,2,3,4,5], mask=[False,False,False,True,False] ), + np.array((1,2,3,4,5)), + ) + expected = [np.array((1,2,3,5))]*3 + actual = axes.delete_masked_points(*input) + assert np.allclose(actual, expected) + + input = () + expected = () + actual = axes.delete_masked_points(*input) + assert np.allclose(actual, expected) + + + input = ( [1,2,3,np.nan,5], + ) + expected = [np.array((1,2,3,5))]*1 + actual = axes.delete_masked_points(*input) + assert np.allclose(actual, expected) + + input = ( np.array((1,2,3,4,5)), + ) + expected = [np.array((1,2,3,4,5))]*1 + actual = axes.delete_masked_points(*input) + assert np.allclose(actual, expected) + + def test_delete_masked_points_strings(self): + input = ( 'hello', + ) + expected = ('hello',) + actual = axes.delete_masked_points(*input) + assert actual == expected + + input = ( u'hello', + ) + expected = (u'hello',) + actual = axes.delete_masked_points(*input) + assert actual == expected + + +if __name__=='__main__': + unittest.main() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |