From: <md...@us...> - 2007-11-15 21:13:03
|
Revision: 4323 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4323&view=rev Author: mdboom Date: 2007-11-15 13:12:54 -0800 (Thu, 15 Nov 2007) Log Message: ----------- Don't create masked arrays unless we absolutely have to. Modified Paths: -------------- branches/transforms/lib/matplotlib/scale.py Modified: branches/transforms/lib/matplotlib/scale.py =================================================================== --- branches/transforms/lib/matplotlib/scale.py 2007-11-15 21:06:14 UTC (rev 4322) +++ branches/transforms/lib/matplotlib/scale.py 2007-11-15 21:12:54 UTC (rev 4323) @@ -1,5 +1,6 @@ import numpy as npy from matplotlib.numerix import npyma as ma +MaskedArray = ma.MaskedArray from ticker import NullFormatter, ScalarFormatter, LogFormatterMathtext from ticker import NullLocator, LogLocator, AutoLocator @@ -26,17 +27,26 @@ def get_transform(self): return IdentityTransform() - + +def _mask_non_positives(a): + mask = a <= 0.0 + if mask.any(): + return ma.MaskedArray(a, mask=mask) + return a + class LogScale(ScaleBase): name = 'log' - + class Log10Transform(Transform): input_dims = 1 output_dims = 1 is_separable = True def transform(self, a): - return ma.log10(ma.masked_where(a <= 0.0, a * 10.0)) + a = _mask_non_positives(a * 10.0) + if isinstance(a, MaskedArray): + return ma.log10(a) + return npy.log10(a) def inverted(self): return LogScale.InvertedLog10Transform() @@ -58,7 +68,10 @@ is_separable = True def transform(self, a): - return ma.log2(ma.masked_where(a <= 0.0, a * 2.0)) + a = _mask_non_positives(a * 2.0) + if isinstance(a, MaskedArray): + return ma.log2(a) + return npy.log2(a) def inverted(self): return LogScale.InvertedLog2Transform() @@ -80,7 +93,10 @@ is_separable = True def transform(self, a): - return ma.log(ma.masked_where(a <= 0.0, a * npy.e)) + a = _mask_non_positives(a * npy.e) + if isinstance(a, MaskedArray): + return ma.log(a) + return npy.log(a) def inverted(self): return LogScale.InvertedNaturalLogTransform() @@ -106,7 +122,10 @@ self._base = base def transform(self, a): - return ma.log(ma.masked_where(a <= 0.0, a * self._base)) / npy.log(self._base) + a = _mask_non_positives(a * self._base) + if isinstance(a, MaskedArray): + return ma.log10(a) / npy.log(self._base) + return npy.log(a) / npy.log(self._base) def inverted(self): return LogScale.InvertedLogTransform(self._base) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |