Attention

The vector search and clustering algorithms in RAFT are being migrated to a new library dedicated to vector search called cuVS. We will continue to support the vector search algorithms in RAFT during this move, but will no longer update them after the RAPIDS 24.06 (June) release. We plan to complete the migration by RAPIDS 24.08 (August) release.

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