00001 /* 00002 * MiraFeatureVector.h 00003 * kbmira - k-best Batch MIRA 00004 * 00005 * An alternative to the existing SparseVector 00006 * and FeatureDataItem combo. Should be as memory 00007 * efficient, and a little more time efficient, 00008 * and should save me from constantly hacking 00009 * SparseVector 00010 */ 00011 00012 #ifndef MERT_MIRA_FEATURE_VECTOR_H 00013 #define MERT_MIRA_FEATURE_VECTOR_H 00014 00015 #include <vector> 00016 #include <iostream> 00017 00018 #include "FeatureDataIterator.h" 00019 00020 namespace MosesTuning 00021 { 00022 00023 00024 typedef FeatureStatsType ValType; 00025 00026 class MiraFeatureVector 00027 { 00028 public: 00029 MiraFeatureVector() {} 00030 MiraFeatureVector(const FeatureDataItem& vec); 00031 //Assumes that features in sparse with id < num_dense are dense features 00032 MiraFeatureVector(const SparseVector& sparse, size_t num_dense); 00033 MiraFeatureVector(const MiraFeatureVector& other); 00034 MiraFeatureVector(const std::vector<ValType>& dense, 00035 const std::vector<std::size_t>& sparseFeats, 00036 const std::vector<ValType>& sparseVals); 00037 00038 ValType val(std::size_t index) const; 00039 std::size_t feat(std::size_t index) const; 00040 std::size_t size() const; 00041 ValType sqrNorm() const; 00042 00043 friend MiraFeatureVector operator-(const MiraFeatureVector& a, 00044 const MiraFeatureVector& b); 00045 00046 friend std::ostream& operator<<(std::ostream& o, const MiraFeatureVector& e); 00047 00048 friend bool operator==(const MiraFeatureVector& a,const MiraFeatureVector& b); 00049 00050 private: 00051 //Ignore any sparse features with id < ignoreLimit 00052 void InitSparse(const SparseVector& sparse, size_t ignoreLimit = 0); 00053 00054 std::vector<ValType> m_dense; 00055 std::vector<std::size_t> m_sparseFeats; 00056 std::vector<ValType> m_sparseVals; 00057 }; 00058 00059 } // namespace 00060 00061 #endif // MERT_FEATURE_VECTOR_H 00062 00063 // --Emacs trickery-- 00064 // Local Variables: 00065 // mode:c++ 00066 // c-basic-offset:2 00067 // End: 00068 00069