From 2a451e304780f6ccd58ff4fe075b4dbc082ce669 Mon Sep 17 00:00:00 2001 From: shubham1206agra Date: Fri, 29 Apr 2022 12:10:55 +0530 Subject: [PATCH] converted guassian to .hpp --- src/mlpack/core/dists/CMakeLists.txt | 2 +- .../core/dists/gaussian_distribution.hpp | 5 ++- ...ion.cpp => gaussian_distribution_impl.hpp} | 41 ++++++++++--------- 3 files changed, 26 insertions(+), 22 deletions(-) rename src/mlpack/core/dists/{gaussian_distribution.cpp => gaussian_distribution_impl.hpp} (82%) diff --git a/src/mlpack/core/dists/CMakeLists.txt b/src/mlpack/core/dists/CMakeLists.txt index f75d27b632..341a1d0200 100644 --- a/src/mlpack/core/dists/CMakeLists.txt +++ b/src/mlpack/core/dists/CMakeLists.txt @@ -4,7 +4,7 @@ set(SOURCES discrete_distribution.hpp discrete_distribution_impl.hpp gaussian_distribution.hpp - gaussian_distribution.cpp + gaussian_distribution_impl.hpp laplace_distribution.hpp laplace_distribution.cpp regression_distribution.hpp diff --git a/src/mlpack/core/dists/gaussian_distribution.hpp b/src/mlpack/core/dists/gaussian_distribution.hpp index 2d47f7d686..6bd1119254 100644 --- a/src/mlpack/core/dists/gaussian_distribution.hpp +++ b/src/mlpack/core/dists/gaussian_distribution.hpp @@ -16,7 +16,7 @@ #include namespace mlpack { -namespace distribution { +namespace distribution /** Probability distributions. */ { /** * A single multivariate Gaussian distribution. @@ -194,4 +194,7 @@ class GaussianDistribution } // namespace distribution } // namespace mlpack +// Include implementation. +#include "gaussian_distribution_impl.hpp" + #endif diff --git a/src/mlpack/core/dists/gaussian_distribution.cpp b/src/mlpack/core/dists/gaussian_distribution_impl.hpp similarity index 82% rename from src/mlpack/core/dists/gaussian_distribution.cpp rename to src/mlpack/core/dists/gaussian_distribution_impl.hpp index 8d4f496012..54ee51b259 100644 --- a/src/mlpack/core/dists/gaussian_distribution.cpp +++ b/src/mlpack/core/dists/gaussian_distribution_impl.hpp @@ -1,5 +1,5 @@ /** - * @file core/dists/gaussian_distribution.cpp + * @file core/dists/gaussian_distribution_impl.hpp * @author Ryan Curtin * @author Michael Fox * @@ -10,33 +10,35 @@ * 3-clause BSD license along with mlpack. If not, see * http://www.opensource.org/licenses/BSD-3-Clause for more information. */ +#ifndef MLPACK_CORE_DISTRIBUTIONS_GAUSSIAN_DISTRIBUTION_IMPL_HPP +#define MLPACK_CORE_DISTRIBUTIONS_GAUSSIAN_DISTRIBUTION_IMPL_HPP + #include "gaussian_distribution.hpp" #include -using namespace mlpack; -using namespace mlpack::distribution; +namespace mlpack { +namespace distribution /** Probability distributions. */ { - -GaussianDistribution::GaussianDistribution(const arma::vec& mean, +inline GaussianDistribution::GaussianDistribution(const arma::vec& mean, const arma::mat& covariance) : mean(mean), logDetCov(0.0) { Covariance(covariance); } -void GaussianDistribution::Covariance(const arma::mat& covariance) +inline void GaussianDistribution::Covariance(const arma::mat& covariance) { this->covariance = covariance; FactorCovariance(); } -void GaussianDistribution::Covariance(arma::mat&& covariance) +inline void GaussianDistribution::Covariance(arma::mat&& covariance) { this->covariance = std::move(covariance); FactorCovariance(); } -void GaussianDistribution::FactorCovariance() +inline void GaussianDistribution::FactorCovariance() { // On Armadillo < 4.500, the "lower" option isn't available. @@ -68,7 +70,7 @@ void GaussianDistribution::FactorCovariance() logDetCov *= 2; } -double GaussianDistribution::LogProbability(const arma::vec& observation) const +inline double GaussianDistribution::LogProbability(const arma::vec& observation) const { const size_t k = observation.n_elem; const arma::vec diff = mean - observation; @@ -76,7 +78,7 @@ double GaussianDistribution::LogProbability(const arma::vec& observation) const return -0.5 * k * log2pi - 0.5 * logDetCov - 0.5 * v(0); } -arma::vec GaussianDistribution::Random() const +inline arma::vec GaussianDistribution::Random() const { return covLower * arma::randn(mean.n_elem) + mean; } @@ -86,7 +88,7 @@ arma::vec GaussianDistribution::Random() const * * @param observations List of observations. */ -void GaussianDistribution::Train(const arma::mat& observations) +inline void GaussianDistribution::Train(const arma::mat& observations) { if (observations.n_cols > 0) { @@ -95,10 +97,7 @@ void GaussianDistribution::Train(const arma::mat& observations) } else // This will end up just being empty. { - // TODO(stephentu): why do we allow this case? why not throw an error? - mean.zeros(0); - covariance.zeros(0); - return; + Log::Fatal << "Observation columns equal to 0." << std::endl; } // Calculate the mean. @@ -130,7 +129,7 @@ void GaussianDistribution::Train(const arma::mat& observations) * account the probability of each observation actually being from this * distribution. */ -void GaussianDistribution::Train(const arma::mat& observations, +inline void GaussianDistribution::Train(const arma::mat& observations, const arma::vec& probabilities) { if (observations.n_cols > 0) @@ -140,10 +139,7 @@ void GaussianDistribution::Train(const arma::mat& observations, } else // This will end up just being empty. { - // TODO(stephentu): same as above - mean.zeros(0); - covariance.zeros(0); - return; + Log::Fatal << "Observation columns equal to 0." << std::endl; } double sumProb = 0; @@ -185,3 +181,8 @@ void GaussianDistribution::Train(const arma::mat& observations, FactorCovariance(); } + +} // namespace distribution +} // namespace mlpack + +#endif