Distribution

Trait Distribution 

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

    // Provided methods
    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T> 
       where R: Rng,
             Self: Sized { ... }
    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
       where F: Fn(T) -> S,
             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 mut rng = thread_rng();

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

// String:
let s: String = Alphanumeric
    .sample_iter(&mut rng)
    .take(7)
    .map(char::from)
    .collect();

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

fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
where F: Fn(T) -> S, Self: Sized,

Create a distribution of values of ‘S’ by mapping the output of Self through the closure F

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

let mut rng = thread_rng();

let die = Uniform::new_inclusive(1, 6);
let even_number = die.map(|num| num % 2 == 0);
while !even_number.sample(&mut rng) {
    println!("Still odd; 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 Distribution<bool> for Bernoulli

Source§

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

Source§

impl Distribution<f64> for Bernoulli

Source§

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

Source§

impl Distribution<f64> for Beta

Source§

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

Source§

impl Distribution<f64> for Binomial

Source§

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

Source§

impl Distribution<f64> for Categorical

Source§

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

Source§

impl Distribution<f64> for Cauchy

Source§

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

Source§

impl Distribution<f64> for Chi

Source§

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

Source§

impl Distribution<f64> for ChiSquared

Source§

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

Source§

impl Distribution<f64> for Dirac

Source§

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

Source§

impl Distribution<f64> for DiscreteUniform

Source§

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

Source§

impl Distribution<f64> for Empirical

Source§

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

Source§

impl Distribution<f64> for Erlang

Source§

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

Source§

impl Distribution<f64> for Exp

Source§

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

Source§

impl Distribution<f64> for FisherSnedecor

Source§

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

Source§

impl Distribution<f64> for Gamma

Source§

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

Source§

impl Distribution<f64> for Geometric

Source§

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

Source§

impl Distribution<f64> for Gumbel

Source§

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

Source§

impl Distribution<f64> for Hypergeometric

Source§

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

Source§

impl Distribution<f64> for InverseGamma

Source§

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

Source§

impl Distribution<f64> for Laplace

Source§

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

Source§

impl Distribution<f64> for LogNormal

Source§

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

Source§

impl Distribution<f64> for Normal

Source§

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

Source§

impl Distribution<f64> for Pareto

Source§

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

Source§

impl Distribution<f64> for Poisson

Source§

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

Generates one sample from the Poisson distribution either by Knuth’s method if lambda < 30.0 or Rejection method PA by A. C. Atkinson from the Journal of the Royal Statistical Society Series C (Applied Statistics) Vol. 28 No. 1. (1979) pp. 29 - 35 otherwise

Source§

impl Distribution<f64> for StudentsT

Source§

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

Source§

impl Distribution<f64> for Triangular

Source§

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

Source§

impl Distribution<f64> for Uniform

Source§

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

Source§

impl Distribution<f64> for Weibull

Source§

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

Source§

impl Distribution<i64> for DiscreteUniform

Source§

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

Source§

impl Distribution<u64> for Binomial

Source§

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

Source§

impl Distribution<u64> for Categorical

Source§

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

Source§

impl Distribution<u64> for Geometric

Source§

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

Source§

impl Distribution<u64> for Hypergeometric

Source§

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

Source§

impl Distribution<u64> for NegativeBinomial

Source§

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

Source§

impl Distribution<u64> for Poisson

Source§

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

Generates one sample from the Poisson distribution either by Knuth’s method if lambda < 30.0 or Rejection method PA by A. C. Atkinson from the Journal of the Royal Statistical Society Series C (Applied Statistics) Vol. 28 No. 1. (1979) pp. 29 - 35 otherwise

Source§

impl Distribution<usize> for Categorical

Source§

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

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,

Source§

impl<D> Distribution<f64> for Data<D>
where D: AsRef<[f64]>,

Source§

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

Source§

impl<D> Distribution<Matrix<f64, D, Const<1>, <DefaultAllocator as Allocator<D>>::Buffer<f64>>> for Dirichlet<D>

Source§

fn sample<R>( &self, rng: &mut R, ) -> Matrix<f64, D, Const<1>, <DefaultAllocator as Allocator<D>>::Buffer<f64>>
where R: Rng + ?Sized,

Source§

impl<D> Distribution<Matrix<f64, D, Const<1>, <DefaultAllocator as Allocator<D>>::Buffer<f64>>> for Multinomial<D>

Source§

fn sample<R>( &self, rng: &mut R, ) -> Matrix<f64, D, Const<1>, <DefaultAllocator as Allocator<D>>::Buffer<f64>>
where R: Rng + ?Sized,

Source§

impl<D> Distribution<Matrix<f64, D, Const<1>, <DefaultAllocator as Allocator<D>>::Buffer<f64>>> for MultivariateNormal<D>
where D: Dim, DefaultAllocator: Allocator<D> + Allocator<D, D>,

Source§

fn sample<R>( &self, rng: &mut R, ) -> Matrix<f64, D, Const<1>, <DefaultAllocator as Allocator<D>>::Buffer<f64>>
where R: Rng + ?Sized,

Samples from the multivariate normal distribution

§Formula
L * Z + μ

where L is the Cholesky decomposition of the covariance matrix, Z is a vector of normally distributed random variables, and μ is the mean vector

Source§

impl<D> Distribution<Matrix<f64, D, Const<1>, <DefaultAllocator as Allocator<D>>::Buffer<f64>>> for MultivariateStudent<D>
where D: Dim, DefaultAllocator: Allocator<D> + Allocator<D, D>,

Source§

fn sample<R>( &self, rng: &mut R, ) -> Matrix<f64, D, Const<1>, <DefaultAllocator as Allocator<D>>::Buffer<f64>>
where R: Rng + ?Sized,

Samples from the multivariate student distribution

§Formula
W ⋅ L ⋅ Z + μ

where W has √(ν/Sν) distribution, Sν has Chi-squared distribution with ν degrees of freedom, L is the Cholesky decomposition of the scale matrix, Z is a vector of normally distributed random variables, and μ is the location vector

Source§

impl<D> Distribution<Matrix<u64, D, Const<1>, <DefaultAllocator as Allocator<D>>::Buffer<u64>>> for Multinomial<D>

Source§

fn sample<R>( &self, rng: &mut R, ) -> Matrix<u64, D, Const<1>, <DefaultAllocator as Allocator<D>>::Buffer<u64>>
where R: Rng + ?Sized,

Implementors§

Source§

impl Distribution<bool> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Bernoulli

Source§

impl Distribution<bool> for Standard

Source§

impl Distribution<char> for Standard

Source§

impl Distribution<f32> for Exp1

Source§

impl Distribution<f32> for Open01

Source§

impl Distribution<f32> for OpenClosed01

Source§

impl Distribution<f32> for Standard

Source§

impl Distribution<f32> for StandardNormal

Source§

impl Distribution<f64> for Exp1

Source§

impl Distribution<f64> for Open01

Source§

impl Distribution<f64> for OpenClosed01

Source§

impl Distribution<f64> for Standard

Source§

impl Distribution<f64> for 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 Alphanumeric

Source§

impl Distribution<u8> for Standard

Source§

impl Distribution<u16> for Standard

Source§

impl Distribution<u32> for Standard

Source§

impl Distribution<u64> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Binomial

Source§

impl Distribution<u64> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Geometric

Source§

impl Distribution<u64> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Hypergeometric

Source§

impl Distribution<u64> for Standard

Source§

impl Distribution<u64> for StandardGeometric

Source§

impl Distribution<u128> for Standard

Source§

impl Distribution<()> for Standard

Source§

impl Distribution<usize> for Standard

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<'a, T> Distribution<&'a T> for Slice<'a, T>

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<D, F, T, S> Distribution<S> for DistMap<D, F, T, S>
where D: Distribution<T>, F: Fn(T) -> S,

Source§

impl<F> Distribution<[F; 2]> for UnitCircle
where F: Float + SampleUniform,

Source§

impl<F> Distribution<[F; 2]> for UnitDisc
where F: Float + SampleUniform,

Source§

impl<F> Distribution<[F; 3]> for UnitBall
where F: Float + SampleUniform,

Source§

impl<F> Distribution<[F; 3]> for UnitSphere
where F: Float + SampleUniform,

Source§

impl<F> Distribution<Vec<F>> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Dirichlet<F>

Source§

impl<F> Distribution<F> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Beta<F>
where F: Float, Open01: Distribution<F>,

Source§

impl<F> Distribution<F> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Cauchy<F>

Source§

impl<F> Distribution<F> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::ChiSquared<F>

Source§

impl<F> Distribution<F> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Exp<F>
where F: Float, Exp1: Distribution<F>,

Source§

impl<F> Distribution<F> for FisherF<F>

Source§

impl<F> Distribution<F> for Frechet<F>

Source§

impl<F> Distribution<F> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Gamma<F>

Source§

impl<F> Distribution<F> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Gumbel<F>

Source§

impl<F> Distribution<F> for InverseGaussian<F>

Source§

impl<F> Distribution<F> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::LogNormal<F>

Source§

impl<F> Distribution<F> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Normal<F>

Source§

impl<F> Distribution<F> for NormalInverseGaussian<F>

Source§

impl<F> Distribution<F> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Pareto<F>

Source§

impl<F> Distribution<F> for Pert<F>

Source§

impl<F> Distribution<F> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Poisson<F>

Source§

impl<F> Distribution<F> for SkewNormal<F>

Source§

impl<F> Distribution<F> for StudentT<F>

Source§

impl<F> Distribution<F> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Triangular<F>
where F: Float, Standard: Distribution<F>,

Source§

impl<F> Distribution<F> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Weibull<F>

Source§

impl<F> Distribution<F> for Zeta<F>

Source§

impl<F> Distribution<F> for Zipf<F>
where F: Float, Standard: Distribution<F>,

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<Complex<T>> for Standard
where T: Num + Clone, Standard: Distribution<T>,

Source§

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

Source§

impl<T> Distribution<Unit<Complex<T>>> for Standard

Source§

impl<T> Distribution<Unit<Quaternion<T>>> for Standard

Source§

impl<T> Distribution<Orthographic3<T>> for Standard

Source§

impl<T> Distribution<Perspective3<T>> for Standard

Source§

impl<T> Distribution<Quaternion<T>> for Standard

Source§

impl<T> Distribution<Rotation<T, 2>> for Standard

Source§

impl<T> Distribution<Rotation<T, 3>> for Standard

Source§

impl<T, D> Distribution<Unit<Matrix<T, D, Const<1>, <DefaultAllocator as Allocator<D>>::Buffer<T>>>> for Standard

Source§

impl<T, D> Distribution<OPoint<T, D>> for Standard

Source§

impl<T, R, C> Distribution<Matrix<T, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<T>>> for Standard

Source§

impl<T, R, const D: usize> Distribution<Isometry<T, R, D>> for Standard

Source§

impl<T, R, const D: usize> Distribution<Similarity<T, R, D>> for Standard

Source§

impl<T, Re, Im> Distribution<Complex<T>> for ComplexDistribution<Re, Im>
where T: Num + Clone, Re: Distribution<T>, Im: Distribution<T>,

Source§

impl<T, const D: usize> Distribution<Scale<T, D>> for Standard

Source§

impl<T, const D: usize> Distribution<Translation<T, D>> for Standard

Source§

impl<W> Distribution<usize> for WeightedAliasIndex<W>
where W: AliasableWeight,

Source§

impl<X> Distribution<usize> for WeightedIndex<X>

Source§

impl<X> Distribution<X> for scirs2_series::gpu_acceleration::ndarray::compat::distributions::Uniform<X>
where X: SampleUniform,