[mlpack-svn] r14618 - mlpack/trunk/src/mlpack/core/dists

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Tue Mar 19 14:56:34 EDT 2013


Author: rcurtin
Date: 2013-03-19 14:56:34 -0400 (Tue, 19 Mar 2013)
New Revision: 14618

Modified:
   mlpack/trunk/src/mlpack/core/dists/discrete_distribution.cpp
   mlpack/trunk/src/mlpack/core/dists/discrete_distribution.hpp
Log:
Better debugging output for DiscreteDistribution.


Modified: mlpack/trunk/src/mlpack/core/dists/discrete_distribution.cpp
===================================================================
--- mlpack/trunk/src/mlpack/core/dists/discrete_distribution.cpp	2013-03-19 16:53:21 UTC (rev 14617)
+++ mlpack/trunk/src/mlpack/core/dists/discrete_distribution.cpp	2013-03-19 18:56:34 UTC (rev 14618)
@@ -46,8 +46,20 @@
   // observation is to turn the default flooring operation of the size_t cast
   // into a rounding operation.
   for (size_t i = 0; i < observations.n_cols; i++)
-    probabilities((size_t) (observations(0, i) + 0.5))++;
+  {
+    const size_t obs = size_t(observations(0, i) + 0.5);
 
+    // Ensure that the observation is within the bounds.
+    if (obs >= probabilities.n_elem)
+    {
+      Log::Debug << "DiscreteDistribution::Estimate(): observation " << i
+          << " (" << obs << ") is invalid; observation must be in [0, "
+          << probabilities.n_elem << "] for this distribution." << std::endl;
+    }
+
+    probabilities(obs)++;
+  }
+
   // Now normalize the distribution.
   double sum = accu(probabilities);
   if (sum > 0)
@@ -70,8 +82,20 @@
   // observation is to turn the default flooring operation of the size_t cast
   // into a rounding observation.
   for (size_t i = 0; i < observations.n_cols; i++)
-    probabilities((size_t) (observations(0, i) + 0.5)) += probObs[i];
+  {
+    const size_t obs = size_t(observations(0, i) + 0.5);
 
+    // Ensure that the observation is within the bounds.
+    if (obs >= probabilities.n_elem)
+    {
+      Log::Debug << "DiscreteDistribution::Estimate(): observation " << i
+          << " (" << obs << ") is invalid; observation must be in [0, "
+          << probabilities.n_elem << "] for this distribution." << std::endl;
+    }
+
+    probabilities(obs) += probObs[i];
+  }
+
   // Now normalize the distribution.
   double sum = accu(probabilities);
   if (sum > 0)

Modified: mlpack/trunk/src/mlpack/core/dists/discrete_distribution.hpp
===================================================================
--- mlpack/trunk/src/mlpack/core/dists/discrete_distribution.hpp	2013-03-19 16:53:21 UTC (rev 14617)
+++ mlpack/trunk/src/mlpack/core/dists/discrete_distribution.hpp	2013-03-19 18:56:34 UTC (rev 14618)
@@ -91,7 +91,17 @@
   {
     // Adding 0.5 helps ensure that we cast the floating point to a size_t
     // correctly.
-    return probabilities((size_t) (observation[0] + 0.5));
+    const size_t obs = size_t(observation[0] + 0.5);
+
+    // Ensure that the observation is within the bounds.
+    if (obs >= probabilities.n_elem)
+    {
+      Log::Debug << "DiscreteDistribution::Probability(): received observation "
+          << obs << "; observation must be in [0, " << probabilities.n_elem
+          << "] for this distribution." << std::endl;
+    }
+
+    return probabilities(obs);
   }
 
   /**
@@ -128,7 +138,7 @@
   const arma::vec& Probabilities() const { return probabilities; }
   //! Modify the vector of probabilities.
   arma::vec& Probabilities() { return probabilities; }
-  
+
   /*
    * Returns a string representation of this object.
    */




More information about the mlpack-svn mailing list