pub trait Sampleable<X> {
// Required method
fn draw<R: Rng>(&self, rng: &mut R) -> X;
// Provided methods
fn sample<R: Rng>(&self, n: usize, rng: &mut R) -> Vec<X> { ... }
fn sample_stream<'r, R: Rng>(
&'r self,
rng: &'r mut R,
) -> Box<dyn Iterator<Item = X> + 'r> { ... }
}Required Methods§
Provided Methods§
Sourcefn sample<R: Rng>(&self, n: usize, rng: &mut R) -> Vec<X>
fn sample<R: Rng>(&self, n: usize, rng: &mut R) -> Vec<X>
Multiple draws of the Rv
§Example
Flip a lot of coins
use rv::dist::Bernoulli;
use rv::traits::*;
let b = Bernoulli::uniform();
let mut rng = rand::rng();
let xs: Vec<bool> = b.sample(22, &mut rng);
assert_eq!(xs.len(), 22);Estimate Gaussian mean
use rv::dist::Gaussian;
use rv::traits::*;
let gauss = Gaussian::standard();
let mut rng = rand::rng();
let xs: Vec<f64> = gauss.sample(100_000, &mut rng);
assert::close(xs.iter().sum::<f64>()/100_000.0, 0.0, 1e-2);Sourcefn sample_stream<'r, R: Rng>(
&'r self,
rng: &'r mut R,
) -> Box<dyn Iterator<Item = X> + 'r>
fn sample_stream<'r, R: Rng>( &'r self, rng: &'r mut R, ) -> Box<dyn Iterator<Item = X> + 'r>
Create a never-ending iterator of samples
§Example
Estimate the mean of a Gamma distribution
use rv::traits::*;
use rv::dist::Gamma;
let mut rng = rand::rng();
let gamma = Gamma::new(2.0, 1.0).unwrap();
let n = 1_000_000_usize;
let mean = <Gamma as Sampleable<f64>>::sample_stream(&gamma, &mut rng)
.take(n)
.sum::<f64>() / n as f64;;
assert::close(mean, 2.0, 1e-2);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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11)> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
T6: Sampleable<X6>,
T7: Sampleable<X7>,
T8: Sampleable<X8>,
T9: Sampleable<X9>,
T10: Sampleable<X10>,
T11: Sampleable<X11>,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11)> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
T6: Sampleable<X6>,
T7: Sampleable<X7>,
T8: Sampleable<X8>,
T9: Sampleable<X9>,
T10: Sampleable<X10>,
T11: Sampleable<X11>,
Source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
T6: Sampleable<X6>,
T7: Sampleable<X7>,
T8: Sampleable<X8>,
T9: Sampleable<X9>,
T10: Sampleable<X10>,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
T6: Sampleable<X6>,
T7: Sampleable<X7>,
T8: Sampleable<X8>,
T9: Sampleable<X9>,
T10: Sampleable<X10>,
Source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, X0, X1, X2, X3, X4, X5, X6, X7, X8, X9> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9)> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
T6: Sampleable<X6>,
T7: Sampleable<X7>,
T8: Sampleable<X8>,
T9: Sampleable<X9>,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, X0, X1, X2, X3, X4, X5, X6, X7, X8, X9> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9)> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
T6: Sampleable<X6>,
T7: Sampleable<X7>,
T8: Sampleable<X8>,
T9: Sampleable<X9>,
Source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, X0, X1, X2, X3, X4, X5, X6, X7, X8> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7, X8)> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
T6: Sampleable<X6>,
T7: Sampleable<X7>,
T8: Sampleable<X8>,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, X0, X1, X2, X3, X4, X5, X6, X7, X8> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7, X8)> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
T6: Sampleable<X6>,
T7: Sampleable<X7>,
T8: Sampleable<X8>,
Source§impl<T0, T1, T2, T3, T4, T5, T6, T7, X0, X1, X2, X3, X4, X5, X6, X7> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7)> for (T0, T1, T2, T3, T4, T5, T6, T7)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
T6: Sampleable<X6>,
T7: Sampleable<X7>,
impl<T0, T1, T2, T3, T4, T5, T6, T7, X0, X1, X2, X3, X4, X5, X6, X7> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7)> for (T0, T1, T2, T3, T4, T5, T6, T7)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
T6: Sampleable<X6>,
T7: Sampleable<X7>,
Source§impl<T0, T1, T2, T3, T4, T5, T6, X0, X1, X2, X3, X4, X5, X6> Sampleable<(X0, X1, X2, X3, X4, X5, X6)> for (T0, T1, T2, T3, T4, T5, T6)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
T6: Sampleable<X6>,
impl<T0, T1, T2, T3, T4, T5, T6, X0, X1, X2, X3, X4, X5, X6> Sampleable<(X0, X1, X2, X3, X4, X5, X6)> for (T0, T1, T2, T3, T4, T5, T6)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
T6: Sampleable<X6>,
Source§impl<T0, T1, T2, T3, T4, T5, X0, X1, X2, X3, X4, X5> Sampleable<(X0, X1, X2, X3, X4, X5)> for (T0, T1, T2, T3, T4, T5)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
impl<T0, T1, T2, T3, T4, T5, X0, X1, X2, X3, X4, X5> Sampleable<(X0, X1, X2, X3, X4, X5)> for (T0, T1, T2, T3, T4, T5)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
T5: Sampleable<X5>,
Source§impl<T0, T1, T2, T3, T4, X0, X1, X2, X3, X4> Sampleable<(X0, X1, X2, X3, X4)> for (T0, T1, T2, T3, T4)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
impl<T0, T1, T2, T3, T4, X0, X1, X2, X3, X4> Sampleable<(X0, X1, X2, X3, X4)> for (T0, T1, T2, T3, T4)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
T2: Sampleable<X2>,
T3: Sampleable<X3>,
T4: Sampleable<X4>,
Source§impl<T0, T1, T2, T3, X0, X1, X2, X3> Sampleable<(X0, X1, X2, X3)> for (T0, T1, T2, T3)
impl<T0, T1, T2, T3, X0, X1, X2, X3> Sampleable<(X0, X1, X2, X3)> for (T0, T1, T2, T3)
Source§impl<T0, T1, T2, X0, X1, X2> Sampleable<(X0, X1, X2)> for (T0, T1, T2)
impl<T0, T1, T2, X0, X1, X2> Sampleable<(X0, X1, X2)> for (T0, T1, T2)
Source§impl<T0, T1, X0, X1> Sampleable<(X0, X1)> for (T0, T1)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
impl<T0, T1, X0, X1> Sampleable<(X0, X1)> for (T0, T1)where
T0: Sampleable<X0>,
T1: Sampleable<X1>,
Source§impl<T0, X0> Sampleable<(X0,)> for (T0,)where
T0: Sampleable<X0>,
impl<T0, X0> Sampleable<(X0,)> for (T0,)where
T0: Sampleable<X0>,
Implementors§
impl Sampleable<f16> for Gaussian
impl Sampleable<f32> for Beta
impl Sampleable<f32> for Cauchy
impl Sampleable<f32> for ChiSquared
impl Sampleable<f32> for Delta
impl Sampleable<f32> for Exponential
impl Sampleable<f32> for Gamma
impl Sampleable<f32> for Gaussian
impl Sampleable<f32> for Gev
impl Sampleable<f32> for InvChiSquared
impl Sampleable<f32> for InvGamma
impl Sampleable<f32> for InvGaussian
impl Sampleable<f32> for KsTwoAsymptotic
impl Sampleable<f32> for Kumaraswamy
impl Sampleable<f32> for Laplace
impl Sampleable<f32> for LogNormal
impl Sampleable<f32> for Pareto
impl Sampleable<f32> for ScaledInvChiSquared
impl Sampleable<f32> for StudentsT
impl Sampleable<f32> for Uniform
impl Sampleable<f32> for UnitPowerLaw
impl Sampleable<f32> for VonMises
impl Sampleable<f64> for Beta
impl Sampleable<f64> for BetaPrime
impl Sampleable<f64> for Cauchy
impl Sampleable<f64> for ChiSquared
impl Sampleable<f64> for Delta
impl Sampleable<f64> for Empirical
impl Sampleable<f64> for Exponential
impl Sampleable<f64> for Gamma
impl Sampleable<f64> for Gaussian
impl Sampleable<f64> for Gev
impl Sampleable<f64> for InvChiSquared
impl Sampleable<f64> for InvGamma
impl Sampleable<f64> for InvGaussian
impl Sampleable<f64> for KsTwoAsymptotic
impl Sampleable<f64> for Kumaraswamy
impl Sampleable<f64> for Laplace
impl Sampleable<f64> for LogNormal
impl Sampleable<f64> for Pareto
impl Sampleable<f64> for ScaledInvChiSquared
impl Sampleable<f64> for StudentsT
impl Sampleable<f64> for Uniform
impl Sampleable<f64> for UnitPowerLaw
impl Sampleable<f64> for VonMises
impl Sampleable<i8> for BetaBinomial
impl Sampleable<i8> for Binomial
impl Sampleable<i8> for Skellam
impl Sampleable<i16> for BetaBinomial
impl Sampleable<i16> for Binomial
impl Sampleable<i16> for Skellam
impl Sampleable<i32> for BetaBinomial
impl Sampleable<i32> for Binomial
impl Sampleable<i32> for Skellam
impl Sampleable<i64> for BetaBinomial
impl Sampleable<i64> for Binomial
impl Sampleable<u8> for BetaBinomial
impl Sampleable<u8> for Binomial
impl Sampleable<u8> for NegBinomial
impl Sampleable<u8> for Poisson
impl Sampleable<u16> for BetaBinomial
impl Sampleable<u16> for Binomial
impl Sampleable<u16> for NegBinomial
impl Sampleable<u16> for Poisson
impl Sampleable<u32> for BetaBinomial
impl Sampleable<u32> for Binomial
impl Sampleable<u32> for NegBinomial
impl Sampleable<u32> for Poisson
impl Sampleable<u64> for BetaBinomial
impl Sampleable<u64> for Binomial
impl Sampleable<usize> for BetaBinomial
impl Sampleable<usize> for Binomial
impl Sampleable<usize> for Cdvm
impl Sampleable<usize> for Poisson
impl Sampleable<usize> for StickBreakingDiscrete
Enables sampling from StickBreakingDiscrete.
impl Sampleable<Partition> for Crp
impl Sampleable<Bernoulli> for Beta
impl Sampleable<Bernoulli> for UnitPowerLaw
impl Sampleable<Categorical> for Dirichlet
impl Sampleable<Categorical> for SymmetricDirichlet
impl Sampleable<Gaussian> for NormalGamma
impl Sampleable<Gaussian> for NormalInvChiSquared
impl Sampleable<Gaussian> for NormalInvGamma
impl Sampleable<MvGaussian> for NormalInvWishart
impl Sampleable<Poisson> for Gamma
impl Sampleable<StickBreakingDiscrete> for BetaPrime
Available on crate feature
experimental only.impl Sampleable<StickBreakingDiscrete> for StickBreaking
Implements the Sampleable trait for StickBreaking.