// Copyright (C) 1999 Jean-Marc Valin #include "msvq.h" #include "msvq.h" #include "ObjectParser.h" using namespace std; namespace FD { DECLARE_TYPE(MSVQ) //@implements MSVQ //@require VQ MSVQ::MSVQ(const vector &_stagesSizes, float (*_dist)(const float *, const float*, int)) : stagesSizes(_stagesSizes) , VQ(_dist) , stages(stagesSizes.size()) { } int MSVQ::ID2Vec(const vector &vec) const { int id=0; for (int i=0;i MSVQ::Vec2ID(int ID) const { vector vec(stagesSizes.size()); int curr = ID; int next; for (int i=stagesSizes.size()-1;i>=0;i--) { int next = curr/stagesSizes[i]; vec[i] = curr - next*stagesSizes[i]; curr = next; } return vec; } int MSVQ::nbClasses() const { int ret = 1; for (int i=0;i &MSVQ::operator[] (int i) const { vector ret(0); return ret; }*/ void MSVQ::train (const vector &data, int len, bool binary) { length = len; vector train(data.size()); float *training_data = new float [len*data.size()]; for (int i=0;i &mean = stages[i][stages[i].getClassID(train[j])]; for (int k=0;k remaining(length); for (int i=0;i &mean = stages[i][id]; for (int k=0;k" << endl; out << "" << endl; out << "" << endl; out << ">\n"; } void MSVQ::readFrom (istream &in) { string tag; while (1) { char ch; in >> ch; if (ch == '>') break; else if (ch != '<') throw new ParsingException ("MSVQ::readFrom : Parse error: '<' expected"); in >> tag; if (tag == "length") in >> length; else if (tag == "stagesSizes") in >> stagesSizes; else if (tag == "stages") in >> stages; else throw new ParsingException ("MSVQ::readFrom : unknown argument: " + tag); if (!in) throw new ParsingException ("MSVQ::readFrom : Parse error trying to build " + tag); in >> tag; if (tag != ">") throw new ParsingException ("MSVQ::readFrom : Parse error: '>' expected "); } } istream &operator >> (istream &in, MSVQ &mdl) { if (!isValidType(in, "MSVQ")) return in; mdl.readFrom(in); return in; } }//namespace FD