int RandFourierMap(int nKernelType, const fvec& x, const std::vector<fvec> &W, const fvec &b, fvec &result) { int nErrCode = 0; if(W.empty() || b.empty()) { return 1; } int nKernelRank = W[0].size(); switch(nKernelType) { case RAND_KERNEL_RBF: for(int rank_idx = 0; rank_idx < nKernelRank; ++rank_idx) { float sum = 0.0; for(int dim_idx = 0; dim_idx < x.size(); ++dim_idx) { sum += W[dim_idx][rank_idx] * x[dim_idx]; } result.push_back(sqrt(2.0 / nKernelRank) * cos(sum + b[rank_idx])); } break; default: nErrCode = 1; } return nErrCode; }