virtual void evaluateAll(OutputArray feature_values) const { Mat_<int> feature_vals(1, (int)features_.size()); for( int i = 0; i < (int)features_.size(); ++i ) { feature_vals(0, i) = evaluate(i); } feature_values.assign(feature_vals); }
void ReadDataLabelLibSVM(const std::string& filename, int32_t feature_dim, int32_t num_data, std::vector<std::vector<float> >* features, std::vector<float>* labels, bool feature_one_based, bool label_one_based, bool snappy_compressed) { petuum::HighResolutionTimer read_timer; features->resize(num_data); labels->resize(num_data); std::string file_str = snappy_compressed ? SnappyOpenFileToString(filename) : OpenFileToString(filename); std::istringstream data_stream(file_str); std::vector<int32_t> feature_ids(feature_dim); std::vector<float> feature_vals(feature_dim); int i = 0; for (std::string line; std::getline(data_stream, line) && i < num_data; ++i) { float label = ParseLibSVMLine(line, &feature_ids, &feature_vals, feature_one_based, label_one_based); (*labels)[i] = label; (*features)[i].resize(feature_dim); for (int j = 0; j < feature_ids.size(); ++j) { (*features)[i][feature_ids[j]] = feature_vals[j]; } } CHECK_EQ(num_data, i) << "Request to read " << num_data << " data instances but only " << i << " found in " << filename; LOG(INFO) << "Read " << i << " instances from " << filename << " in " << read_timer.elapsed() << " seconds."; }