11 #ifndef MLPACK_CORE_MATH_RANDOM_HPP
12 #define MLPACK_CORE_MATH_RANDOM_HPP
15 #include <mlpack/mlpack_export.hpp>
27 extern MLPACK_EXPORT std::mt19937
randGen;
42 #if (!defined(BINDING_TYPE) || BINDING_TYPE != BINDING_TYPE_TEST)
44 #if (BINDING_TYPE == BINDING_TYPE_R)
48 srand((
unsigned int) seed);
50 arma::arma_rng::set_seed(seed);
63 #if (BINDING_TYPE == BINDING_TYPE_TEST)
66 const static size_t seed = rand();
68 srand((
unsigned int) seed);
69 arma::arma_rng::set_seed(seed);
75 srand((
unsigned int) seed);
76 arma::arma_rng::set_seed(seed);
91 inline double Random(
const double lo,
const double hi)
118 inline int RandInt(
const int lo,
const int hiExclusive)
120 return lo + (int) std::floor((
double) (hiExclusive - lo)
139 inline double RandNormal(
const double mean,
const double variance)
154 const size_t hiExclusive,
155 const size_t maxNumSamples,
156 arma::uvec& distinctSamples)
158 const size_t samplesRangeSize = hiExclusive - loInclusive;
160 if (samplesRangeSize > maxNumSamples)
162 arma::Col<size_t> samples;
164 samples.zeros(samplesRangeSize);
166 for (
size_t i = 0; i < maxNumSamples; ++i)
169 distinctSamples = arma::find(samples > 0);
172 distinctSamples += loInclusive;
176 distinctSamples.set_size(samplesRangeSize);
177 for (
size_t i = 0; i < samplesRangeSize; ++i)
178 distinctSamples[i] = loInclusive + i;
185 #endif // MLPACK_CORE_MATH_MATH_LIB_HPP