28 init(file, is_labelled, size);
40 ASSERT(index>=0 && index<current_num_features);
46 for (int32_t i=0; i<current_length; i++)
47 if (current_vector[i].feat_index==index)
48 ret += current_vector[i].entry;
62 int32_t n=current_num_features;
64 current_num_features=num;
71 int32_t dim = get_dim_feature_space();
75 memset(&vec[len], 0, (dim-len) *
sizeof(
float32_t));
83 int32_t dim = get_dim_feature_space();
87 memset(&vec[len], 0, (dim-len) *
sizeof(
float64_t));
103 for (int32_t i=0; i<alen; i++)
107 while ( (j<blen) && (bvec[j].feat_index < a_feat_idx) )
110 if ( (j<blen) && (bvec[j].feat_index == a_feat_idx) )
120 for (int32_t i=0; i<blen; i++)
124 while ( (j<alen) && (avec[j].feat_index < b_feat_idx) )
127 if ( (j<alen) && (avec[j].feat_index == b_feat_idx) )
145 ASSERT(dim>=current_num_features);
148 int32_t num_feat=current_length;
153 for (int32_t i=0; i<num_feat; i++)
154 result+=alpha*vec[sv[i].feat_index]*sv[i].entry;
164 if (vec2_len < current_num_features)
166 SG_ERROR(
"dimension of vec2 (=%d) does not match number of features (=%d)\n",
167 vec2_len, current_num_features);
173 for (int32_t i=0; i<current_length; i++)
174 result+=vec2[current_vector[i].feat_index]*current_vector[i].entry;
184 if (vec2_len < current_num_features)
186 SG_ERROR(
"dimension of vec2 (=%d) does not match number of features (=%d)\n",
187 vec2_len, current_num_features);
193 for (int32_t i=0; i<current_length; i++)
194 result+=vec2[current_vector[i].feat_index]*current_vector[i].entry;
204 if (vec2_len < current_num_features)
206 SG_ERROR(
"dimension of vec (=%d) does not match number of features (=%d)\n",
207 vec2_len, current_num_features);
211 int32_t num_feat=current_length;
217 for (int32_t i=0; i<num_feat; i++)
218 vec2[sv[i].feat_index]+= alpha*
CMath::abs(sv[i].entry);
222 for (int32_t i=0; i<num_feat; i++)
223 vec2[sv[i].feat_index]+= alpha*sv[i].entry;
232 if (vec2_len < current_num_features)
234 SG_ERROR(
"dimension of vec (=%d) does not match number of features (=%d)\n",
235 vec2_len, current_num_features);
239 int32_t num_feat=current_length;
245 for (int32_t i=0; i<num_feat; i++)
246 vec2[sv[i].feat_index]+= alpha*
CMath::abs(sv[i].entry);
250 for (int32_t i=0; i<num_feat; i++)
251 vec2[sv[i].feat_index]+= alpha*sv[i].entry;
259 return current_length;
269 for (int32_t i=0; i<current_length; i++)
270 sq += current_vector[i].entry * current_vector[i].entry;
281 int32_t len=current_length;
283 int32_t* feat_idx=
SG_MALLOC(int32_t, len);
284 int32_t* orig_idx=
SG_MALLOC(int32_t, len);
286 for (int32_t i=0; i<len; i++)
296 for (int32_t i=0; i<len; i++)
297 sf_new[i]=sf_orig[orig_idx[i]];
300 for (int32_t i=0; i<len-1; i++)
301 ASSERT(sf_new[i].feat_index<sf_new[i+1].feat_index);
304 for (int32_t i=0; i<len; i++)
305 sf_orig[i]=sf_new[i];
339 parser.set_read_vector_and_label
343 #define GET_FEATURE_TYPE(f_type, sg_type) \
344 template<> EFeatureType CStreamingSparseFeatures<sg_type>::get_feature_type() const \
362 #undef GET_FEATURE_TYPE
366 void CStreamingSparseFeatures<T>::init()
372 current_num_features=-1;
376 void CStreamingSparseFeatures<T>::init(CStreamingFile* file,
381 has_labels = is_labelled;
383 parser.init(file, is_labelled, size);
389 if (!parser.is_running())
390 parser.start_parser();
403 ret_value = (bool) parser.get_next_example(current_vector,
411 for (int32_t i=0; i<current_length; i++)
413 if (current_vector[i].feat_index > current_num_features)
414 current_num_features = current_vector[i].feat_index+1;
424 current_sgvector.features=current_vector;
425 current_sgvector.num_feat_entries=current_length;
427 return current_sgvector;
435 return current_label;
441 parser.finalize_example();
447 return current_num_features;
460 return current_num_features;
466 return current_length;