21 explicit Sampler(
const size_t num_samples);
24 virtual void Initialize(
const size_t total_num_samples) = 0;
30 virtual std::vector<size_t>
Sample() = 0;
36 template <
typename X_t>
37 void SampleX(
const X_t&
X, X_t* X_rand);
43 template <
typename X_t,
typename Y_t>
44 void SampleXY(
const X_t&
X,
const Y_t& Y, X_t* X_rand, Y_t* Y_rand);
51 template <
typename X_t>
53 const auto sample_idxs =
Sample();
54 for (
size_t i = 0; i < X_rand->size(); ++i) {
55 (*X_rand)[i] =
X[sample_idxs[i]];
59 template <
typename X_t,
typename Y_t>
61 CHECK_EQ(
X.size(), Y.size());
62 CHECK_EQ(X_rand->size(), Y_rand->size());
63 const auto sample_idxs =
Sample();
64 for (
size_t i = 0; i < X_rand->size(); ++i) {
65 (*X_rand)[i] =
X[sample_idxs[i]];
66 (*Y_rand)[i] = Y[sample_idxs[i]];
virtual std::vector< size_t > Sample()=0
virtual size_t MaxNumSamples()=0
void SampleXY(const X_t &X, const Y_t &Y, X_t *X_rand, Y_t *Y_rand)
void SampleX(const X_t &X, X_t *X_rand)
Sampler(const size_t num_samples)
virtual void Initialize(const size_t total_num_samples)=0