// Copyright (C) 1999 Jean-Marc Valin #ifndef MSVQ_H #define MSVQ_H #include "kmeans.h" #include "Object.h" #include namespace FD { /**This is a multi-stage vector quantization class, and has nothing to do with microsoft :-)*/ class MSVQ : public VQ { protected: std::vector stagesSizes; std::vector stages; public: MSVQ(float (*_dist)(const float *, const float*, int) = KMeans::euclidian) : VQ(_dist) {} MSVQ(const std::vector &_stagesSizes, float (*_dist)(const float *, const float*, int) = KMeans::euclidian); int ID2Vec(const std::vector &vec) const; std::vector Vec2ID(int ID) const; int nbClasses() const; int nbStages() const {return stagesSizes.size();} //const std::vector &operator[] (int i) const; void train (const std::vector &data, int len, bool binary=false); int getClassID (const float *v, float *dist_return = NULL) const; //void calcDist (const float *v, float *dist_return) const; void printOn(std::ostream &out=std::cout) const; void readFrom (std::istream &in=std::cin); friend std::istream &operator >> (std::istream &in, MSVQ &mdl); }; }//namespace FD #endif