SHOGUN  v3.2.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
ProbabilityDistribution.cpp
Go to the documentation of this file.
00001 /*
00002  * This program is free software; you can redistribute it and/or modify
00003  * it under the terms of the GNU General Public License as published by
00004  * the Free Software Foundation; either version 3 of the License, or
00005  * (at your option) any later version.
00006  *
00007  * Written (W) 2013 Heiko Strathmann
00008  */
00009 
00010 #include <shogun/distributions/classical/ProbabilityDistribution.h>
00011 #include <shogun/base/Parameter.h>
00012 #include <shogun/lib/SGVector.h>
00013 #include <shogun/lib/SGMatrix.h>
00014 
00015 using namespace shogun;
00016 
00017 CProbabilityDistribution::CProbabilityDistribution() : CSGObject()
00018 {
00019     init();
00020 }
00021 
00022 CProbabilityDistribution::CProbabilityDistribution(int32_t dimension) :
00023         CSGObject()
00024 {
00025     init();
00026 
00027     REQUIRE(dimension>0, "Dimension of Distribution must be positive\n",
00028             dimension);
00029 
00030     m_dimension=dimension;
00031 }
00032 
00033 
00034 CProbabilityDistribution::~CProbabilityDistribution()
00035 {
00036 
00037 }
00038 
00039 SGMatrix<float64_t> CProbabilityDistribution::sample(int32_t num_samples,
00040         SGMatrix<float64_t> pre_samples) const
00041 {
00042     SG_ERROR("Not implemented in sub-class\n");
00043     return SGMatrix<float64_t>();
00044 }
00045 
00046 SGVector<float64_t> CProbabilityDistribution::sample() const
00047 {
00048     SGMatrix<float64_t> s=sample(1);
00049     SGVector<float64_t> result(m_dimension);
00050     memcpy(result.vector, s.matrix, m_dimension*sizeof(float64_t));
00051     return result;
00052 }
00053 
00054 SGVector<float64_t> CProbabilityDistribution::log_pdf_multiple(
00055         SGMatrix<float64_t> samples) const
00056 {
00057     SG_ERROR("Not implemented in sub-class\n");
00058     return SGVector<float64_t>();
00059 }
00060 
00061 float64_t CProbabilityDistribution::log_pdf(SGVector<float64_t> sample_vec) const
00062 {
00063     REQUIRE(sample_vec.vlen==m_dimension, "Sample dimension (%d) does not "
00064             "match dimension of distribution (%d)\n", sample_vec.vlen,
00065             m_dimension);
00066 
00067     SGMatrix<float64_t> s(m_dimension, 1);
00068     memcpy(s.matrix, sample_vec.vector, m_dimension*sizeof(float64_t));
00069     return log_pdf_multiple(s)[0];
00070 }
00071 
00072 void CProbabilityDistribution::init()
00073 {
00074     m_dimension=0;
00075 
00076     SG_ADD(&m_dimension, "dimension", "Dimension of distribution.",
00077             MS_NOT_AVAILABLE);
00078 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

SHOGUN Machine Learning Toolbox - Documentation