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/dataProvider.h | |
parent | 20587ac550cfcb2d7b3d6ec16e46ba1a8d0af869 (diff) | |
download | ranksvm-52ca742e14e36cd37010bae9a7678dd5b1a7eaf5.tar.gz ranksvm-52ca742e14e36cd37010bae9a7678dd5b1a7eaf5.tar.bz2 ranksvm-52ca742e14e36cd37010bae9a7678dd5b1a7eaf5.zip |
branched for mem
Diffstat (limited to 'tools/dataProvider.h')
-rw-r--r-- | tools/dataProvider.h | 81 |
1 files changed, 65 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; |