[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