DataSetView sample(DataSet& dataSet, double fraction, bool replacement) { std::vector<int> indices; int samples = std::ceil(dataSet.samples() * fraction); indices.reserve(samples); RandomNumberGenerator rng; if(replacement) for(int n = 0; n < samples; n++) indices[n] = rng.generateIndex(dataSet.samples()); else rng.generateIndices(dataSet.samples(), indices, false); return DataSetView(dataSet, indices.begin(), indices.begin() + samples); }