Repository: climate
Updated Branches:
  refs/heads/master 751c7a418 -> a54b66ebd


metrics.py now uses numpy.ma modules to calculate metrics


Project: http://git-wip-us.apache.org/repos/asf/climate/repo
Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/61fb7134
Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/61fb7134
Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/61fb7134

Branch: refs/heads/master
Commit: 61fb7134acdeb792cad522abe30e87c994e0d78e
Parents: fe190b6
Author: huikyole <[email protected]>
Authored: Mon Jun 8 11:14:56 2015 -0700
Committer: huikyole <[email protected]>
Committed: Mon Jun 8 11:14:56 2015 -0700

----------------------------------------------------------------------
 ocw/metrics.py | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/climate/blob/61fb7134/ocw/metrics.py
----------------------------------------------------------------------
diff --git a/ocw/metrics.py b/ocw/metrics.py
index 47c20de..23e0dd4 100644
--- a/ocw/metrics.py
+++ b/ocw/metrics.py
@@ -23,7 +23,8 @@ Classes:
 from abc import ABCMeta, abstractmethod
 import ocw.utils as utils
 import numpy
-from scipy import stats
+import numpy.ma as ma
+from scipy.stats import mstats
 
 class Metric(object):
     '''Base Metric Class'''
@@ -105,7 +106,7 @@ class TemporalStdDev(UnaryMetric):
         :returns: The temporal standard deviation of the target dataset
         :rtype: :class:`ndarray`
         '''
-        return target_dataset.values.std(axis=0, ddof=1)
+        return ma.std(target_dataset.values.std, axis=0)
 
 
 class StdDevRatio(BinaryMetric):
@@ -150,7 +151,7 @@ class PatternCorrelation(BinaryMetric):
         # stats.pearsonr returns correlation_coefficient, 2-tailed p-value
         # We only care about the correlation coefficient
         # Docs at 
http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.pearsonr.html
-        return stats.pearsonr(ref_dataset.values.flatten(), 
target_dataset.values.flatten())[0]
+        return mstats.pearsonr(ref_dataset.values.flatten(), 
target_dataset.values.flatten())[0]
 
 
 class TemporalCorrelation(BinaryMetric):
@@ -177,12 +178,12 @@ class TemporalCorrelation(BinaryMetric):
             coefficients
         '''
         num_times, num_lats, num_lons = reference_dataset.values.shape
-        coefficients = numpy.zeros([num_lats, num_lons])
-        levels = numpy.zeros([num_lats, num_lons])
+        coefficients = ma.zeros([num_lats, num_lons])
+        levels = ma.zeros([num_lats, num_lons])
         for i in numpy.arange(num_lats):
             for j in numpy.arange(num_lons):
                 coefficients[i, j], levels[i, j] = (
-                    stats.pearsonr(
+                    mstats.pearsonr(
                         reference_dataset.values[:, i, j],
                         target_dataset.values[:, i, j]
                     )
@@ -213,7 +214,7 @@ class TemporalMeanBias(BinaryMetric):
         diff = target_dataset.values - ref_dataset.values 
         if absolute:
             diff = abs(diff)
-        mean_bias = diff.mean(axis=0)
+        mean_bias = ma.mean(diff, axis=0)
 
         return mean_bias
 
@@ -239,7 +240,7 @@ class SpatialMeanOfTemporalMeanBias(BinaryMetric):
         '''
 
         bias = target_dataset.values - reference_dataset.values 
-        return bias.mean()
+        return ma.mean(bias)
 
 
 class RMSError(BinaryMetric):
@@ -265,5 +266,5 @@ class RMSError(BinaryMetric):
         '''
 
         sqdiff = (reference_dataset.values - target_dataset.values) ** 2
-        return numpy.sqrt(sqdiff.mean())
+        return (ma.mean(sqdiff))**0.5
 

Reply via email to