📄 gaussianprior.h
字号:
#ifndef Amis_GaussianPrior_h_#define Amis_GaussianPrior_h_#include <amis/EmpiricalExpect.h>#include <string>#include <vector>#include <memory>AMIS_NAMESPACE_BEGINclass GaussianPrior : public std::vector< Real >{public: GaussianPrior() {} virtual ~GaussianPrior() {} Real sigma( int i ) const { return sqrt( variance( i ) ); } Real variance( int i ) const { return 1.0 / (*this)[ i ]; } Real invVariance( int i ) const { return (*this)[ i ]; } void setSigma( int i, Real s ) { (*this)[ i ] = 1.0 / ( s * s ); } void setVariance( int i, Real s ) { (*this)[ i ] = 1.0 / s; } void setInvVariance( int i, Real s ) { (*this)[ i ] = s; }public: virtual void initialize( const EmpiricalExpectBase& empirical_expect ) = 0; virtual std::string getName() const = 0;};typedef std::auto_ptr< GaussianPrior > GaussianPriorPtr;//////////////////////////////////////////////////////////////////////class GaussianPriorSingle : public GaussianPrior {private: Real default_sigma;public: GaussianPriorSingle( Real s ) : GaussianPrior() { default_sigma = s; } virtual ~GaussianPriorSingle() {} Real defaultSigma() const { return default_sigma; } void setDefaultSigma( Real s ) { default_sigma = s; }public: void initialize( const EmpiricalExpectBase& empirical_expect ) { //std::cerr << "size=" << empirical_expect.size() << std::endl; resize( empirical_expect.size() ); //std::cerr << size() << std::endl; Real inv_variance = 1.0 / ( default_sigma * default_sigma ); for ( iterator it = begin(); it != end(); ++it ) { *it = inv_variance; } } std::string getName() const { return "GaussianPriorSingle"; }};//////////////////////////////////////////////////////////////////////class GaussianPriorInvEmp : public GaussianPrior {private: Real default_sigma;public: GaussianPriorInvEmp( Real s ) : GaussianPrior() { default_sigma = s; } virtual ~GaussianPriorInvEmp() {} Real defaultSigma() const { return default_sigma; } void setDefaultSigma( Real s ) { default_sigma = s; }public: void initialize( const EmpiricalExpectBase& empirical_expect ) { resize( empirical_expect.size() ); Real inv_variance = 1.0 / ( default_sigma * default_sigma ); for ( size_t i = 0; i < size(); ++i ) { (*this)[ i ] = inv_variance * empirical_expect[ i ] * empirical_expect[ i ]; } } std::string getName() const { return "GaussianPriorInvEmp"; }};/* std::string getVarianceString() const { OStringStream ss; ss << "[sigma=" << sigma << ","; if ( variance_type == SINGLE ) { ss << "vtype=SINGLE]"; } else if ( variance_type == INV_EMP ) { ss << "vtype=INV_EMP]"; } else if ( variance_type == BAYES_BIN ) { ss << "vtype=BAYES_BIN]"; } else if ( variance_type == BAYES_BIN_RAW_SIGMA ) { ss << "vtype=BAYES_BIN_RAW_SIGMA]"; } else if ( variance_type == BAYES_BIN_HIST ) { ss << "vtype=BAYES_BIN_HIST]"; } else if ( variance_type == BAYES_BIN_HIST_RAW_SIGMA ) { ss << "vtype=BAYES_BIN_HIST_RAW_SIGMA]"; } return ss.str(); }*/AMIS_NAMESPACE_END#endif // Amis_GaussianPrior_h_// end of GaussianPrior.h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -