本文整理汇总了C++中TIntFltKdV::AddV方法的典型用法代码示例。如果您正苦于以下问题:C++ TIntFltKdV::AddV方法的具体用法?C++ TIntFltKdV::AddV怎么用?C++ TIntFltKdV::AddV使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TIntFltKdV
的用法示例。
在下文中一共展示了TIntFltKdV::AddV方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AddFtr
void TFtrGenMultiNom::AddFtr(const TStrV& StrV, TIntFltKdV& SpV, int& Offset) const {
// generate feature vector just for this feature generate
TIntFltKdV MultiNomSpV(StrV.Len(), 0);
for (int StrN = 0; StrN < StrV.Len(); StrN++) {
const int FtrId = FtrGen.GetFtr(StrV[StrN]);
// only use features we've seen during updates
if (FtrId != -1) {
MultiNomSpV.Add(TIntFltKd(Offset + FtrId, 1.0));
}
}
MultiNomSpV.Sort();
// merge elements with same id
double NormSq = 0.0;
int GoodSpN = 0;
for (int SpN = 1; SpN < MultiNomSpV.Len(); SpN++) {
if (MultiNomSpV[GoodSpN].Key == MultiNomSpV[SpN].Key) {
// repeatition of previous id
MultiNomSpV[GoodSpN].Dat += MultiNomSpV[SpN].Dat;
} else { // new id
// keep track of norm
NormSq += TMath::Sqr(MultiNomSpV[GoodSpN].Dat);
// increase the pointer to the next good position
GoodSpN++;
// and move the new value down to the good position
MultiNomSpV[GoodSpN] = MultiNomSpV[SpN];
}
}
// only bother if there is something to add
if (MultiNomSpV.Len() > 0) {
// update the norm with the last element
NormSq += TMath::Sqr(MultiNomSpV[GoodSpN].Dat);
// truncate the vector
MultiNomSpV.Trunc(GoodSpN+1);
// normalize
double Norm = TMath::Sqrt(NormSq);
TLinAlg::MultiplyScalar(1.0 / Norm, MultiNomSpV, MultiNomSpV);
// add the the full feature vector and increase offset count
SpV.AddV(MultiNomSpV);
}
// increase the offset by the dimension
Offset += GetVals();
}