void local_storage::inp(const common::sfv_t& sfv, map_feature_val1_t& ret) const { ret.clear(); scoped_rlock lk(mutex_); // Use uin64_t map instead of string map as hash function for string is slow jubatus::util::data::unordered_map<uint64_t, double> ret_id; for (common::sfv_t::const_iterator it = sfv.begin(); it != sfv.end(); ++it) { const string& feature = it->first; const double val = it->second; id_features3_t::const_iterator it2 = tbl_.find(feature); if (it2 == tbl_.end()) { continue; } const id_feature_val3_t& m = it2->second; for (id_feature_val3_t::const_iterator it3 = m.begin(); it3 != m.end(); ++it3) { ret_id[it3->first] += it3->second.v1 * val; } } std::vector<std::string> labels = class2id_.get_all_id2key(); for (size_t i = 0; i < labels.size(); ++i) { const std::string& label = labels[i]; uint64_t id = class2id_.get_id_const(label); if (id == common::key_manager::NOTFOUND || ret_id.count(id) == 0) { ret[label] = 0.0; } else { ret[label] = ret_id[id]; } } }
void local_storage::inp(const common::sfv_t& sfv, map_feature_val1_t& ret) const { ret.clear(); std::vector<float> ret_id(class2id_.size()); for (common::sfv_t::const_iterator it = sfv.begin(); it != sfv.end(); ++it) { const string& feature = it->first; const float val = it->second; id_features3_t::const_iterator it2 = tbl_.find(feature); if (it2 == tbl_.end()) { continue; } const id_feature_val3_t& m = it2->second; for (id_feature_val3_t::const_iterator it3 = m.begin(); it3 != m.end(); ++it3) { ret_id[it3->first] += it3->second.v1 * val; } } for (size_t i = 0; i < ret_id.size(); ++i) { if (ret_id[i] == 0.f) { continue; } ret[class2id_.get_key(i)] = ret_id[i]; } }
void storage_base::inp(const common::sfv_t& sfv, map_feature_val1_t& ret) const { ret.clear(); for (common::sfv_t::const_iterator it = sfv.begin(); it != sfv.end(); ++it) { const string& feature = it->first; const float val = it->second; feature_val1_t fval1; get(feature, fval1); for (feature_val1_t::const_iterator it2 = fval1.begin(); it2 != fval1.end(); ++it2) { ret[it2->first] += it2->second * val; } } }
void local_storage_mixture::inp(const sfv_t& sfv, map_feature_val1_t& ret) { ret.clear(); std::vector<float> ret_id(class2id_.size()); for (sfv_t::const_iterator it = sfv.begin(); it != sfv.end(); ++it){ const string& feature = it->first; const float val = it->second; id_feature_val3_t m; get_internal(feature, m); for (id_feature_val3_t::const_iterator it3 = m.begin(); it3 != m.end(); ++it3){ ret_id[it3->first] += it3->second.v1 * val; } } for (size_t i = 0; i < ret_id.size(); ++i){ if (ret_id[i] == 0.f) continue; ret[class2id_.get_key(i)] = ret_id[i]; } }