SHOGUN  v2.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
StreamingDenseFeatures.cpp
Go to the documentation of this file.
4 
5 namespace shogun
6 {
8 {
10  init();
11  parser.set_free_vector_after_release(false);
12 }
13 
15  bool is_labelled,
16  int32_t size)
18 {
19  init(file, is_labelled, size);
21  parser.set_free_vector_after_release(false);
22 }
23 
25  float64_t* lab)
27 {
29  bool is_labelled;
30  int32_t size = 1024;
31 
32  if (lab)
33  {
34  is_labelled = true;
35  file = new CStreamingFileFromDenseFeatures<T>(dense_features, lab);
36  }
37  else
38  {
39  is_labelled = false;
40  file = new CStreamingFileFromDenseFeatures<T>(dense_features);
41  }
42 
43  SG_REF(file);
44 
45  init(file, is_labelled, size);
47  parser.set_free_vector_after_release(false);
48  parser.set_free_vectors_on_destruct(false);
49  seekable=true;
50 }
51 
53 {
54  parser.end_parser();
55 }
56 
58 {
59  if (seekable)
60  {
61  ((CStreamingFileFromDenseFeatures<T>*) working_file)->reset_stream();
62  parser.exit_parser();
63  parser.init(working_file, has_labels, 1);
64  parser.set_free_vector_after_release(false);
65  parser.start_parser();
66  }
67 }
68 
69 template <class T> float32_t CStreamingDenseFeatures<T>::dense_dot(const float32_t* vec2, int32_t vec2_len)
70 {
71  ASSERT(vec2_len==current_length);
72  float32_t result=0;
73 
74  for (int32_t i=0; i<current_length; i++)
75  result+=current_vector[i]*vec2[i];
76 
77  return result;
78 }
79 
80 template <class T> float64_t CStreamingDenseFeatures<T>::dense_dot(const float64_t* vec2, int32_t vec2_len)
81 {
82  ASSERT(vec2_len==current_length);
83  float64_t result=0;
84 
85  for (int32_t i=0; i<current_length; i++)
86  result+=current_vector[i]*vec2[i];
87 
88  return result;
89 }
90 
91 template <class T> void CStreamingDenseFeatures<T>::add_to_dense_vec(float32_t alpha, float32_t* vec2, int32_t vec2_len , bool abs_val)
92 {
93  ASSERT(vec2_len==current_length);
94 
95  if (abs_val)
96  {
97  for (int32_t i=0; i<current_length; i++)
98  vec2[i]+=alpha*CMath::abs(current_vector[i]);
99  }
100  else
101  {
102  for (int32_t i=0; i<current_length; i++)
103  vec2[i]+=alpha*current_vector[i];
104  }
105 }
106 
107 template <class T> void CStreamingDenseFeatures<T>::add_to_dense_vec(float64_t alpha, float64_t* vec2, int32_t vec2_len , bool abs_val)
108 {
109  ASSERT(vec2_len==current_length);
110 
111  if (abs_val)
112  {
113  for (int32_t i=0; i<current_length; i++)
114  vec2[i]+=alpha*CMath::abs(current_vector[i]);
115  }
116  else
117  {
118  for (int32_t i=0; i<current_length; i++)
119  vec2[i]+=alpha*current_vector[i];
120  }
121 }
122 
124 {
125  return current_length;
126 }
127 
129 {
130  return new CStreamingDenseFeatures<T>(*this);
131 }
132 
133 template <class T> int32_t CStreamingDenseFeatures<T>::get_num_vectors() const
134 {
135  if (current_vector)
136  return 1;
137  return 0;
138 }
139 
140 template <class T> int32_t CStreamingDenseFeatures<T>::get_size() const
141 {
142  return sizeof(T);
143 }
144 
145 template <class T>
147 {
148  parser.set_read_vector(&CStreamingFile::get_vector);
149 }
150 
151 template <class T>
153 {
154  parser.set_read_vector_and_label(&CStreamingFile::get_vector_and_label);
155 }
156 
157 #define GET_FEATURE_TYPE(f_type, sg_type) \
158 template<> EFeatureType CStreamingDenseFeatures<sg_type>::get_feature_type() const \
159 { \
160  return f_type; \
161 }
162 
165 GET_FEATURE_TYPE(F_BYTE, uint8_t)
166 GET_FEATURE_TYPE(F_BYTE, int8_t)
167 GET_FEATURE_TYPE(F_SHORT, int16_t)
168 GET_FEATURE_TYPE(F_WORD, uint16_t)
169 GET_FEATURE_TYPE(F_INT, int32_t)
170 GET_FEATURE_TYPE(F_UINT, uint32_t)
171 GET_FEATURE_TYPE(F_LONG, int64_t)
172 GET_FEATURE_TYPE(F_ULONG, uint64_t)
176 #undef GET_FEATURE_TYPE
177 
178 
179 template <class T>
180 void CStreamingDenseFeatures<T>::init()
181 {
182  working_file=NULL;
183  current_vector=NULL;
184  seekable=false;
185  current_length=-1;
186 }
187 
188 template <class T>
189 void CStreamingDenseFeatures<T>::init(CStreamingFile* file,
190  bool is_labelled,
191  int32_t size)
192 {
193  init();
194  has_labels = is_labelled;
195  working_file = file;
196  parser.init(file, is_labelled, size);
197  seekable=false;
198 }
199 
200 template <class T>
202 {
203  if (!parser.is_running())
204  parser.start_parser();
205 }
206 
207 template <class T>
209 {
210  parser.end_parser();
211 }
212 
213 template <class T>
215 {
216  bool ret_value;
217  ret_value = (bool) parser.get_next_example(current_vector,
218  current_length,
219  current_label);
220 
221  return ret_value;
222 }
223 
224 template <class T>
226 {
227  current_sgvector=SGVector<T>(current_vector, current_length, false);
228 
229  return current_sgvector;
230 }
231 
232 template <class T>
234 {
235  ASSERT(has_labels);
236 
237  return current_label;
238 }
239 
240 template <class T>
242 {
243  parser.finalize_example();
244 }
245 
246 template <class T>
248 {
249  return current_length;
250 }
251 
252 template <class T>
254 {
255  ASSERT(df);
256  ASSERT(df->get_feature_type() == get_feature_type());
257  ASSERT(df->get_feature_class() == get_feature_class());
259 
260  SGVector<T> other_vector=sf->get_vector();
261 
262  return SGVector<T>::dot(current_vector, other_vector.vector, current_length);
263 }
264 
265 template <class T>
267 {
268  int32_t len1;
269  len1=sgvec1.vlen;
270 
271  if (len1 != current_length)
272  SG_ERROR("Lengths %d and %d not equal while computing dot product!\n", len1, current_length);
273 
274  return SGVector<T>::dot(current_vector, sgvec1.vector, len1);
275 }
276 
277 template <class T>
279 {
280  return current_length;
281 }
282 
283 template <class T>
285 {
286  return C_STREAMING_DENSE;
287 }
288 
289 template class CStreamingDenseFeatures<bool>;
290 template class CStreamingDenseFeatures<char>;
291 template class CStreamingDenseFeatures<int8_t>;
292 template class CStreamingDenseFeatures<uint8_t>;
293 template class CStreamingDenseFeatures<int16_t>;
294 template class CStreamingDenseFeatures<uint16_t>;
295 template class CStreamingDenseFeatures<int32_t>;
296 template class CStreamingDenseFeatures<uint32_t>;
297 template class CStreamingDenseFeatures<int64_t>;
298 template class CStreamingDenseFeatures<uint64_t>;
302 }

SHOGUN Machine Learning Toolbox - Documentation