pub struct Normal<F>where
F: Float,
StandardNormal: Distribution<F>,{ /* private fields */ }
Expand description
The normal distribution N(mean, std_dev**2)
.
This uses the ZIGNOR variant of the Ziggurat method, see StandardNormal
for more details.
Note that StandardNormal
is an optimised implementation for mean 0, and
standard deviation 1.
Example
use rand_distr::{Normal, Distribution};
// mean 2, standard deviation 3
let normal = Normal::new(2.0, 3.0).unwrap();
let v = normal.sample(&mut rand::thread_rng());
println!("{} is from a N(2, 9) distribution", v)
Implementations§
source§impl<F> Normal<F>where
F: Float,
StandardNormal: Distribution<F>,
impl<F> Normal<F>where F: Float, StandardNormal: Distribution<F>,
sourcepub fn new(mean: F, std_dev: F) -> Result<Normal<F>, Error>
pub fn new(mean: F, std_dev: F) -> Result<Normal<F>, Error>
Construct, from mean and standard deviation
Parameters:
- mean (
μ
, unrestricted) - standard deviation (
σ
, must be finite)
sourcepub fn from_mean_cv(mean: F, cv: F) -> Result<Normal<F>, Error>
pub fn from_mean_cv(mean: F, cv: F) -> Result<Normal<F>, Error>
Construct, from mean and coefficient of variation
Parameters:
- mean (
μ
, unrestricted) - coefficient of variation (
cv = abs(σ / μ)
)
sourcepub fn from_zscore(&self, zscore: F) -> F
pub fn from_zscore(&self, zscore: F) -> F
Sample from a z-score
This may be useful for generating correlated samples x1
and x2
from two different distributions, as follows.
let mut rng = thread_rng();
let z = StandardNormal.sample(&mut rng);
let x1 = Normal::new(0.0, 1.0).unwrap().from_zscore(z);
let x2 = Normal::new(2.0, -3.0).unwrap().from_zscore(z);
Trait Implementations§
source§impl<F> Clone for Normal<F>where
F: Clone + Float,
StandardNormal: Distribution<F>,
impl<F> Clone for Normal<F>where F: Clone + Float, StandardNormal: Distribution<F>,
source§impl<F> Debug for Normal<F>where
F: Debug + Float,
StandardNormal: Distribution<F>,
impl<F> Debug for Normal<F>where F: Debug + Float, StandardNormal: Distribution<F>,
source§impl<F> Distribution<F> for Normal<F>where
F: Float,
StandardNormal: Distribution<F>,
impl<F> Distribution<F> for Normal<F>where F: Float, StandardNormal: Distribution<F>,
source§fn sample<R>(&self, rng: &mut R) -> Fwhere
R: Rng + ?Sized,
fn sample<R>(&self, rng: &mut R) -> Fwhere R: Rng + ?Sized,
Generate a random value of
T
, using rng
as the source of randomness.impl<F> Copy for Normal<F>where F: Copy + Float, StandardNormal: Distribution<F>,
Auto Trait Implementations§
impl<F> RefUnwindSafe for Normal<F>where F: RefUnwindSafe,
impl<F> Send for Normal<F>where F: Send,
impl<F> Sync for Normal<F>where F: Sync,
impl<F> Unpin for Normal<F>where F: Unpin,
impl<F> UnwindSafe for Normal<F>where F: UnwindSafe,
Blanket Implementations§
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self
from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self
is actually part of its subset T
(and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset
but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self
to the equivalent element of its superset.