diff options
author | Joe Zhao <ztuowen@gmail.com> | 2015-05-13 18:56:39 +0800 |
---|---|---|
committer | Joe Zhao <ztuowen@gmail.com> | 2015-05-13 18:56:39 +0800 |
commit | 52ca742e14e36cd37010bae9a7678dd5b1a7eaf5 (patch) | |
tree | e76674e9ae78764de175f57d7a3bb162c6ac0ed4 /tools | |
parent | 20587ac550cfcb2d7b3d6ec16e46ba1a8d0af869 (diff) | |
download | ranksvm-52ca742e14e36cd37010bae9a7678dd5b1a7eaf5.tar.gz ranksvm-52ca742e14e36cd37010bae9a7678dd5b1a7eaf5.tar.bz2 ranksvm-52ca742e14e36cd37010bae9a7678dd5b1a7eaf5.zip |
branched for mem
Diffstat (limited to 'tools')
-rw-r--r-- | tools/dataProvider.h | 81 | ||||
-rw-r--r-- | tools/fileDataProvider.cpp | 11 | ||||
-rw-r--r-- | tools/fileDataProvider.h | 2 |
3 files changed, 78 insertions, 16 deletions
diff --git a/tools/dataProvider.h b/tools/dataProvider.h index 028980e..a3f3d34 100644 --- a/tools/dataProvider.h +++ b/tools/dataProvider.h @@ -55,6 +55,70 @@ public: } }; +class RidList{ +private: + int n; + std::vector<DataEntry*> uniq; + std::vector<DataEntry*> other; +public: + void clear(){ + uniq.clear(); + other.clear(); + } + void setfSize(int fsize){n=fsize;} + int getfSize(){return n;} + void addEntry(DataEntry* d){ + int ext=false; + for (int i=0;i<uniq.size();++i) + if (uniq[i]->qid==d->qid) + { + ext = true; + d->rank = i; + } + if (ext) + other.push_back(d); + else + uniq.push_back(d); + } + int getqSize() + { + return (int)(uniq.size()+other.size()-1); + } + int getuSize() + { + return (int)uniq.size(); + } + int getSize() + { + return getuSize()*getqSize(); + } + Eigen::VectorXd getVec(int x){ + int a,b,n=getqSize(); + a=x/n; + b=x%n; + Eigen::VectorXd vec = uniq[a]->feature; + if (b<a) + vec=vec-uniq[b]->feature; + else + if (b<uniq.size()-1) + vec=vec-uniq[b+1]->feature; + else + vec=vec-other[b-uniq.size()+1]->feature; + return vec.cwiseAbs(); + }; + double getL(int x){ + int a,b,n=(int)(uniq.size()+other.size()-1); + a=x/n; + b=x%n; + if (b<uniq.size()-1) + return -1; + else + if (std::fabs(other[b-uniq.size()+1]->rank - a) < 1e-5) + return 1; + return -1; + }; +}; + class DataProvider //Virtual base class for data input { protected: @@ -63,22 +127,7 @@ public: DataProvider():eof(false){}; bool EOFile(){return eof;} - void getAllDataSet(DataList &out){\ - out.clear(); - DataList buf; - while (!EOFile()) - { - getDataSet(buf); - // won't work as data are discarded with every call to getDataSet - // out.getData().insert(out.getData().end(),buf.getData().begin(),buf.getData().end()); - for (int i=0;i<buf.getSize();++i) - { - out.addEntry(out.copyEntry(buf.getData()[i])); - } - out.setfSize(buf.getfSize()); - } - buf.clear(); - } + virtual void getAllDataSet(RidList &out) = 0; virtual int getDataSet(DataList &out) = 0; virtual int open()=0; virtual int close()=0; diff --git a/tools/fileDataProvider.cpp b/tools/fileDataProvider.cpp index e9b7f3d..1ff0279 100644 --- a/tools/fileDataProvider.cpp +++ b/tools/fileDataProvider.cpp @@ -170,4 +170,15 @@ void RidFileDP::take(int n,vector<DataEntry*> &a,vector<DataEntry*> &b) b.push_back(tmp[i]); scrambler(a); scrambler(b); +} + +void RidFileDP::getAllDataSet(RidList &out){ + DataEntry *e; + if (!read) + readEntries(); + out.clear(); + std::vector<DataEntry*> &dat = d.getData(); + for (int i=0;i<dat.size();++i) + out.addEntry(dat[i]); + out.setfSize(d.getfSize()); }
\ No newline at end of file diff --git a/tools/fileDataProvider.h b/tools/fileDataProvider.h index 7bea92d..567c8e2 100644 --- a/tools/fileDataProvider.h +++ b/tools/fileDataProvider.h @@ -17,6 +17,7 @@ private: public: FileDP(std::string fn=""):fname(fn){}; virtual int getDataSet(DataList &out); + virtual void getAllDataSet(RidList &out){ LOG(FATAL)<<"getAllDataSet for normal FileDP not implemented";}; virtual int open(){fin.open(fname); eof=false;return 0;}; virtual int close(){fin.close();return 0;}; }; @@ -37,6 +38,7 @@ public: void readEntries(); int getfSize() { if(!read) readEntries(); return d.getfSize();}; int getpSize(); + virtual void getAllDataSet(RidList &out); virtual int getDataSet(DataList &out); virtual int open(){fin.open(fname); eof=false;return 0;}; virtual int close(){fin.close(); d.clear();return 0;}; |