rand_distr

Trait Distribution

Source
pub trait Distribution<T> {
    // Required method
    fn sample<R>(&self, rng: &mut R) -> T
       where R: Rng + ?Sized;

    // Provided method
    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T> 
       where R: Rng,
             Self: Sized { ... }
}
Expand description

Types (distributions) that can be used to create a random instance of T.

It is possible to sample from a distribution through both the Distribution and Rng traits, via distr.sample(&mut rng) and rng.sample(distr). They also both offer the sample_iter method, which produces an iterator that samples from the distribution.

All implementations are expected to be immutable; this has the significant advantage of not needing to consider thread safety, and for most distributions efficient state-less sampling algorithms are available.

Implementations are typically expected to be portable with reproducible results when used with a PRNG with fixed seed; see the portability chapter of The Rust Rand Book. In some cases this does not apply, e.g. the usize type requires different sampling on 32-bit and 64-bit machines.

Required Methods§

Source

fn sample<R>(&self, rng: &mut R) -> T
where R: Rng + ?Sized,

Generate a random value of T, using rng as the source of randomness.

Provided Methods§

Source

fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
where R: Rng, Self: Sized,

Create an iterator that generates random values of T, using rng as the source of randomness.

Note that this function takes self by value. This works since Distribution<T> is impl’d for &D where D: Distribution<T>, however borrowing is not automatic hence distr.sample_iter(...) may need to be replaced with (&distr).sample_iter(...) to borrow or (&*distr).sample_iter(...) to reborrow an existing reference.

§Example
use rand::thread_rng;
use rand::distributions::{Distribution, Alphanumeric, Uniform, Standard};

let rng = thread_rng();

// Vec of 16 x f32:
let v: Vec<f32> = Standard.sample_iter(rng).take(16).collect();

// String:
let s: String = Alphanumeric.sample_iter(rng).take(7).collect();

// Dice-rolling:
let die_range = Uniform::new_inclusive(1, 6);
let mut roll_die = die_range.sample_iter(rng);
while roll_die.next().unwrap() != 6 {
    println!("Not a 6; rolling again!");
}

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<'a, T, D> Distribution<T> for &'a D
where D: Distribution<T>,

Source§

fn sample<R>(&self, rng: &mut R) -> T
where R: Rng + ?Sized,

Implementors§

Source§

impl Distribution<bool> for Bernoulli

Source§

impl Distribution<bool> for Standard

Source§

impl Distribution<char> for Alphanumeric

Source§

impl Distribution<char> for Standard

Source§

impl Distribution<f32> for rand_distr::Exp1

Source§

impl Distribution<f32> for Open01

Source§

impl Distribution<f32> for OpenClosed01

Source§

impl Distribution<f32> for Standard

Source§

impl Distribution<f32> for rand_distr::StandardNormal

Source§

impl Distribution<f64> for rand::distributions::cauchy::Cauchy

Source§

impl Distribution<f64> for rand::distributions::exponential::Exp1

Source§

impl Distribution<f64> for rand::distributions::exponential::Exp

Source§

impl Distribution<f64> for rand::distributions::gamma::Beta

Source§

impl Distribution<f64> for rand::distributions::gamma::ChiSquared

Source§

impl Distribution<f64> for rand::distributions::gamma::FisherF

Source§

impl Distribution<f64> for rand::distributions::gamma::Gamma

Source§

impl Distribution<f64> for rand::distributions::gamma::StudentT

Source§

impl Distribution<f64> for rand::distributions::normal::LogNormal

Source§

impl Distribution<f64> for rand::distributions::normal::Normal

Source§

impl Distribution<f64> for rand::distributions::normal::StandardNormal

Source§

impl Distribution<f64> for rand::distributions::pareto::Pareto

Source§

impl Distribution<f64> for rand::distributions::triangular::Triangular

Source§

impl Distribution<f64> for rand::distributions::weibull::Weibull

Source§

impl Distribution<f64> for rand_distr::Exp1

Source§

impl Distribution<f64> for Open01

Source§

impl Distribution<f64> for OpenClosed01

Source§

impl Distribution<f64> for Standard

Source§

impl Distribution<f64> for rand_distr::StandardNormal

Source§

impl Distribution<i8> for Standard

Source§

impl Distribution<i16> for Standard

Source§

impl Distribution<i32> for Standard

Source§

impl Distribution<i64> for Standard

Source§

impl Distribution<i128> for Standard

Source§

impl Distribution<isize> for Standard

Source§

impl Distribution<u8> for Standard

Source§

impl Distribution<u16> for Standard

Source§

impl Distribution<u32> for Standard

Source§

impl Distribution<u64> for rand::distributions::binomial::Binomial

Source§

impl Distribution<u64> for rand::distributions::poisson::Poisson

Source§

impl Distribution<u64> for rand_distr::Binomial

Source§

impl Distribution<u64> for Standard

Source§

impl Distribution<u128> for Standard

Source§

impl Distribution<()> for Standard

Source§

impl Distribution<usize> for Standard

Source§

impl Distribution<Vec<f64>> for rand::distributions::dirichlet::Dirichlet

Source§

impl Distribution<NonZero<u8>> for Standard

Source§

impl Distribution<NonZero<u16>> for Standard

Source§

impl Distribution<NonZero<u32>> for Standard

Source§

impl Distribution<NonZero<u64>> for Standard

Source§

impl Distribution<NonZero<u128>> for Standard

Source§

impl Distribution<NonZero<usize>> for Standard

Source§

impl Distribution<[f64; 2]> for rand::distributions::unit_circle::UnitCircle

Source§

impl Distribution<[f64; 3]> for UnitSphereSurface

Source§

impl<A> Distribution<(A,)> for Standard

Source§

impl<A, B> Distribution<(A, B)> for Standard

Source§

impl<A, B, C> Distribution<(A, B, C)> for Standard

Source§

impl<A, B, C, D> Distribution<(A, B, C, D)> for Standard

Source§

impl<A, B, C, D, E> Distribution<(A, B, C, D, E)> for Standard

Source§

impl<A, B, C, D, E, F> Distribution<(A, B, C, D, E, F)> for Standard

Source§

impl<A, B, C, D, E, F, G> Distribution<(A, B, C, D, E, F, G)> for Standard

Source§

impl<A, B, C, D, E, F, G, H> Distribution<(A, B, C, D, E, F, G, H)> for Standard

Source§

impl<A, B, C, D, E, F, G, H, I> Distribution<(A, B, C, D, E, F, G, H, I)> for Standard

Source§

impl<A, B, C, D, E, F, G, H, I, J> Distribution<(A, B, C, D, E, F, G, H, I, J)> for Standard

Source§

impl<A, B, C, D, E, F, G, H, I, J, K> Distribution<(A, B, C, D, E, F, G, H, I, J, K)> for Standard

Source§

impl<A, B, C, D, E, F, G, H, I, J, K, L> Distribution<(A, B, C, D, E, F, G, H, I, J, K, L)> for Standard

Source§

impl<N: Float + SampleUniform> Distribution<[N; 2]> for rand_distr::UnitCircle

Source§

impl<N: Float + SampleUniform> Distribution<[N; 2]> for UnitDisc

Source§

impl<N: Float + SampleUniform> Distribution<[N; 3]> for UnitBall

Source§

impl<N: Float + SampleUniform> Distribution<[N; 3]> for UnitSphere

Source§

impl<N: Float> Distribution<u64> for rand_distr::Poisson<N>

Source§

impl<N: Float> Distribution<Vec<N>> for rand_distr::Dirichlet<N>

Source§

impl<N: Float> Distribution<N> for rand_distr::Beta<N>

Source§

impl<N: Float> Distribution<N> for rand_distr::Cauchy<N>

Source§

impl<N: Float> Distribution<N> for rand_distr::ChiSquared<N>

Source§

impl<N: Float> Distribution<N> for rand_distr::Exp<N>
where Exp1: Distribution<N>,

Source§

impl<N: Float> Distribution<N> for rand_distr::FisherF<N>

Source§

impl<N: Float> Distribution<N> for rand_distr::Gamma<N>

Source§

impl<N: Float> Distribution<N> for rand_distr::LogNormal<N>

Source§

impl<N: Float> Distribution<N> for rand_distr::Normal<N>

Source§

impl<N: Float> Distribution<N> for rand_distr::Pareto<N>

Source§

impl<N: Float> Distribution<N> for Pert<N>

Source§

impl<N: Float> Distribution<N> for rand_distr::Poisson<N>

Source§

impl<N: Float> Distribution<N> for rand_distr::StudentT<N>

Source§

impl<N: Float> Distribution<N> for rand_distr::Triangular<N>

Source§

impl<N: Float> Distribution<N> for rand_distr::Weibull<N>

Source§

impl<T> Distribution<Option<T>> for Standard

Source§

impl<T> Distribution<[T; 0]> for Standard

Source§

impl<T> Distribution<[T; 1]> for Standard

Source§

impl<T> Distribution<[T; 2]> for Standard

Source§

impl<T> Distribution<[T; 3]> for Standard

Source§

impl<T> Distribution<[T; 4]> for Standard

Source§

impl<T> Distribution<[T; 5]> for Standard

Source§

impl<T> Distribution<[T; 6]> for Standard

Source§

impl<T> Distribution<[T; 7]> for Standard

Source§

impl<T> Distribution<[T; 8]> for Standard

Source§

impl<T> Distribution<[T; 9]> for Standard

Source§

impl<T> Distribution<[T; 10]> for Standard

Source§

impl<T> Distribution<[T; 11]> for Standard

Source§

impl<T> Distribution<[T; 12]> for Standard

Source§

impl<T> Distribution<[T; 13]> for Standard

Source§

impl<T> Distribution<[T; 14]> for Standard

Source§

impl<T> Distribution<[T; 15]> for Standard

Source§

impl<T> Distribution<[T; 16]> for Standard

Source§

impl<T> Distribution<[T; 17]> for Standard

Source§

impl<T> Distribution<[T; 18]> for Standard

Source§

impl<T> Distribution<[T; 19]> for Standard

Source§

impl<T> Distribution<[T; 20]> for Standard

Source§

impl<T> Distribution<[T; 21]> for Standard

Source§

impl<T> Distribution<[T; 22]> for Standard

Source§

impl<T> Distribution<[T; 23]> for Standard

Source§

impl<T> Distribution<[T; 24]> for Standard

Source§

impl<T> Distribution<[T; 25]> for Standard

Source§

impl<T> Distribution<[T; 26]> for Standard

Source§

impl<T> Distribution<[T; 27]> for Standard

Source§

impl<T> Distribution<[T; 28]> for Standard

Source§

impl<T> Distribution<[T; 29]> for Standard

Source§

impl<T> Distribution<[T; 30]> for Standard

Source§

impl<T> Distribution<[T; 31]> for Standard

Source§

impl<T> Distribution<[T; 32]> for Standard

Source§

impl<T> Distribution<Wrapping<T>> for Standard

Source§

impl<W> Distribution<usize> for rand_distr::weighted::alias_method::WeightedIndex<W>
where W: Weight,

Source§

impl<X> Distribution<usize> for rand_distr::weighted::WeightedIndex<X>

Source§

impl<X> Distribution<X> for Uniform<X>
where X: SampleUniform,