Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef _COMBINEDDOTFEATURES_H___
00014 #define _COMBINEDDOTFEATURES_H___
00015
00016 #include <shogun/lib/common.h>
00017 #include <shogun/lib/List.h>
00018 #include <shogun/features/DotFeatures.h>
00019
00020 namespace shogun
00021 {
00022 class CFeatures;
00023 class CList;
00024 class CListElement;
00044 class CCombinedDotFeatures : public CDotFeatures
00045 {
00046 public:
00048 CCombinedDotFeatures();
00049
00051 CCombinedDotFeatures(const CCombinedDotFeatures & orig);
00052
00054 virtual ~CCombinedDotFeatures();
00055
00060 inline virtual int32_t get_num_vectors() const
00061 {
00062 return num_vectors;
00063 }
00064
00069 inline virtual int32_t get_dim_feature_space() const
00070 {
00071 return num_dimensions;
00072 }
00073
00081 virtual float64_t dot(int32_t vec_idx1, CDotFeatures* df, int32_t vec_idx2);
00082
00089 virtual float64_t dense_dot(int32_t vec_idx1, const float64_t* vec2, int32_t vec2_len);
00090
00102 virtual void dense_dot_range(float64_t* output, int32_t start,
00103 int32_t stop, float64_t* alphas, float64_t* vec,
00104 int32_t dim, float64_t b);
00105
00117 virtual void dense_dot_range_subset(int32_t* sub_index, int32_t num,
00118 float64_t* output, float64_t* alphas, float64_t* vec,
00119 int32_t dim, float64_t b);
00120
00129 virtual void add_to_dense_vec(float64_t alpha, int32_t vec_idx1,
00130 float64_t* vec2, int32_t vec2_len, bool abs_val=false);
00131
00137 virtual int32_t get_nnz_features_for_vector(int32_t num);
00138
00143 inline virtual EFeatureType get_feature_type()
00144 {
00145 return F_DREAL;
00146 }
00147
00152 inline virtual EFeatureClass get_feature_class()
00153 {
00154 return C_COMBINED_DOT;
00155 }
00156
00161 inline virtual int32_t get_size()
00162 {
00163 return sizeof(float64_t);
00164 }
00165
00166 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00167
00168 struct combined_feature_iterator
00169 {
00171 CDotFeatures* f;
00173 CListElement* current;
00175 void* iterator;
00177 int32_t vector_index;
00178 };
00179 #endif
00180
00190 virtual void* get_feature_iterator(int32_t vector_index);
00191
00202 virtual bool get_next_feature(int32_t& index, float64_t& value, void* iterator);
00203
00209 virtual void free_feature_iterator(void* iterator);
00210
00215 virtual CFeatures* duplicate() const;
00216
00218 void list_feature_objs();
00219
00224 CDotFeatures* get_first_feature_obj();
00225
00231 CDotFeatures* get_first_feature_obj(CListElement*& current);
00232
00237 CDotFeatures* get_next_feature_obj();
00238
00244 CDotFeatures* get_next_feature_obj(CListElement*& current);
00245
00250 CDotFeatures* get_last_feature_obj();
00251
00257 bool insert_feature_obj(CDotFeatures* obj);
00258
00264 bool append_feature_obj(CDotFeatures* obj);
00265
00270 bool delete_feature_obj();
00271
00276 int32_t get_num_feature_obj();
00277
00283 virtual void get_subfeature_weights(float64_t** weights, int32_t* num_weights);
00284
00290 virtual void set_subfeature_weights(
00291 float64_t* weights, int32_t num_weights);
00292
00294 inline virtual const char* get_name() const { return "CombinedDotFeatures"; }
00295
00296 protected:
00298 void update_dim_feature_space_and_num_vec();
00299
00300 private:
00301 void init();
00302
00303 protected:
00305 CList* feature_list;
00306
00308 int32_t num_vectors;
00310 int32_t num_dimensions;
00311 };
00312 }
00313 #endif // _DOTFEATURES_H___