Univariate Random Sampling#

#include <raft/random/rng.cuh>

namespace raft::random

template<typename OutputValueType, typename IndexType>
void uniform(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<OutputValueType, IndexType> out, OutputValueType start, OutputValueType end)#

Generate uniformly distributed numbers in the given range.

Template Parameters:
  • OutputValueType – Data type of output random number

  • Index – Data type used to represent length of the arrays

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • out[out] the output array

  • start[in] start of the range

  • end[in] end of the range

template<typename OutputValueType, typename IndexType>
void uniformInt(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<OutputValueType, IndexType> out, OutputValueType start, OutputValueType end)#

Generate uniformly distributed integers in the given range.

Template Parameters:
  • OutputValueType – Integral type; value type of the output vector

  • IndexType – Type used to represent length of the output vector

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • out[out] the output vector of random numbers

  • start[in] start of the range

  • end[in] end of the range

template<typename OutputValueType, typename IndexType>
void normal(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<OutputValueType, IndexType> out, OutputValueType mu, OutputValueType sigma)#

Generate normal distributed numbers with a given mean and standard deviation.

Template Parameters:
  • OutputValueType – data type of output random number

  • IndexType – data type used to represent length of the arrays

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • out[out] the output array

  • mu[in] mean of the distribution

  • sigma[in] std-dev of the distribution

template<typename OutputValueType, typename IndexType>
void normalInt(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<OutputValueType, IndexType> out, OutputValueType mu, OutputValueType sigma)#

Generate normal distributed integers.

Template Parameters:
  • OutputValueType – Integral type; value type of the output vector

  • IndexType – Integral type of the output vector’s length

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • out[out] the output array

  • mu[in] mean of the distribution

  • sigma[in] standard deviation of the distribution

template<typename OutputValueType, typename IndexType>
void normalTable(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<const OutputValueType, IndexType> mu_vec, std::variant<raft::device_vector_view<const OutputValueType, IndexType>, OutputValueType> sigma, raft::device_matrix_view<OutputValueType, IndexType, raft::row_major> out)#

Generate normal distributed table according to the given set of means and scalar standard deviations.

Each row in this table conforms to a normally distributed n-dim vector whose mean is the input vector and standard deviation is the corresponding vector or scalar. Correlations among the dimensions itself are assumed to be absent.

Template Parameters:
  • OutputValueType – data type of output random number

  • IndexType – data type used to represent length of the arrays

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • mu_vec[in] mean vector (of length out.extent(1))

  • sigma[in] Either the standard-deviation vector (of length out.extent(1)) of each component, or a scalar standard deviation for all components.

  • out[out] the output table

template<typename OutputValueType, typename IndexType>
void fill(raft::resources const &handle, RngState &rng_state, OutputValueType val, raft::device_vector_view<OutputValueType, IndexType> out)#

Fill a vector with the given value.

Template Parameters:
  • OutputValueType – Value type of the output vector

  • IndexType – Integral type used to represent length of the output vector

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • val[in] value with which to fill the output vector

  • out[out] the output vector

template<typename OutputValueType, typename IndexType, typename Type>
void bernoulli(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<OutputValueType, IndexType> out, Type prob)#

Generate bernoulli distributed boolean array.

Template Parameters:
  • OutputValueType – Type of each element of the output vector; must be able to represent boolean values (e.g., bool)

  • IndexType – Integral type of the output vector’s length

  • Type – Data type in which to compute the probabilities

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • out[out] the output vector

  • prob[in] coin-toss probability for heads

template<typename OutputValueType, typename IndexType>
void scaled_bernoulli(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<OutputValueType, IndexType> out, OutputValueType prob, OutputValueType scale)#

Generate bernoulli distributed array and applies scale.

Template Parameters:
  • OutputValueType – Data type in which to compute the probabilities

  • IndexType – Integral type of the output vector’s length

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • out[out] the output vector

  • prob[in] coin-toss probability for heads

  • scale[in] scaling factor

template<typename OutputValueType, typename IndexType = int>
void gumbel(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<OutputValueType, IndexType> out, OutputValueType mu, OutputValueType beta)#

Generate Gumbel distributed random numbers.

Template Parameters:
  • OutputValueType – data type of output random number

  • IndexType – data type used to represent length of the arrays

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • out[out] output array

  • mu[in] mean value

  • beta[in] scale value

template<typename OutputValueType, typename IndexType>
void lognormal(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<OutputValueType, IndexType> out, OutputValueType mu, OutputValueType sigma)#

Generate lognormal distributed numbers.

Template Parameters:
  • OutputValueType – data type of output random number

  • IndexType – data type used to represent length of the arrays

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • out[out] the output array

  • mu[in] mean of the distribution

  • sigma[in] standard deviation of the distribution

template<typename OutputValueType, typename IndexType = int>
void logistic(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<OutputValueType, IndexType> out, OutputValueType mu, OutputValueType scale)#

Generate logistic distributed random numbers.

Template Parameters:
  • OutputValueType – data type of output random number

  • IndexType – data type used to represent length of the arrays

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • out[out] output array

  • mu[in] mean value

  • scale[in] scale value

template<typename OutputValueType, typename IndexType>
void exponential(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<OutputValueType, IndexType> out, OutputValueType lambda)#

Generate exponentially distributed random numbers.

Template Parameters:
  • OutputValueType – data type of output random number

  • IndexType – data type used to represent length of the arrays

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • out[out] output array

  • lambda[in] the exponential distribution’s lambda parameter

template<typename OutputValueType, typename IndexType>
void rayleigh(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<OutputValueType, IndexType> out, OutputValueType sigma)#

Generate rayleigh distributed random numbers.

Template Parameters:
  • OutputValueType – data type of output random number

  • IndexType – data type used to represent length of the arrays

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • out[out] output array

  • sigma[in] the distribution’s sigma parameter

template<typename OutputValueType, typename IndexType>
void laplace(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<OutputValueType, IndexType> out, OutputValueType mu, OutputValueType scale)#

Generate laplace distributed random numbers.

Template Parameters:
  • OutputValueType – data type of output random number

  • IndexType – data type used to represent length of the arrays

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • out[out] output array

  • mu[in] the mean

  • scale[in] the scale

template<typename OutType, typename WeightType, typename IndexType>
std::enable_if_t<std::is_integral_v<OutType>> discrete(raft::resources const &handle, RngState &rng_state, raft::device_vector_view<OutType, IndexType> out, raft::device_vector_view<const WeightType, IndexType> weights)#

Generate random integers, where the probability of i is weights[i]/sum(weights)

Usage example:

#include <raft/core/device_mdarray.hpp>
#include <raft/core/resources.hpp>
#include <raft/random/rng.cuh>

raft::resources handle;
...
raft::random::RngState rng(seed);
auto indices = raft::make_device_vector<int>(handle, n_samples);
raft::random::discrete(handle, rng, indices.view(), weights);

Template Parameters:
  • OutType – integer output type

  • WeightType – weight type

  • IndexType – data type used to represent length of the arrays

Parameters:
  • handle[in] raft handle for resource management

  • rng_state[in] random number generator state

  • out[out] output array

  • weights[in] weight array