Struct rv::dist::Categorical
source · pub struct Categorical { /* private fields */ }
Expand description
Categorical distribution over unordered values in [0, k).
Implementations§
source§impl Categorical
impl Categorical
sourcepub fn new(weights: &[f64]) -> Result<Self, CategoricalError>
pub fn new(weights: &[f64]) -> Result<Self, CategoricalError>
Construct a new Categorical distribution from weights
§Arguments
- weights: A vector describing the proportional likelihood of each outcome. The weights must all be positive, but do not need to sum to 1 because they will be normalized in the constructor.
§Examples
let weights: Vec<f64> = vec![4.0, 2.0, 3.0, 1.0];
let cat = Categorical::new(&weights).unwrap();
assert!(cat.supports(&0_u8));
assert!(cat.supports(&3_u8));
assert!(!cat.supports(&4_u8));
assert::close(cat.pmf(&0_u8), 0.4, 1E-12);
sourcepub fn from_ln_weights(ln_weights: Vec<f64>) -> Result<Self, CategoricalError>
pub fn from_ln_weights(ln_weights: Vec<f64>) -> Result<Self, CategoricalError>
Build a Categorical distribution from normalized log weights
§Arguments
- ln_weights: A vector describing the proportional likelihood of each outcome in log space. sum(exp(ln_weights)) must be equal to 1.
§Example
let ln_weights: Vec<f64> = vec![
-2.3025850929940455,
-1.6094379124341003,
-1.2039728043259361,
-0.916290731874155
];
let cat = Categorical::from_ln_weights(ln_weights).unwrap();
assert::close(cat.pmf(&0_u8), 0.1, 1E-12);
assert::close(cat.pmf(&1_u8), 0.2, 1E-12);
assert::close(cat.pmf(&2_u8), 0.3, 1E-12);
assert::close(cat.pmf(&3_u8), 0.4, 1E-12);
sourcepub fn new_unchecked(ln_weights: Vec<f64>) -> Self
pub fn new_unchecked(ln_weights: Vec<f64>) -> Self
Creates a new Categorical without checking whether the ln weights are valid.
sourcepub fn uniform(k: usize) -> Self
pub fn uniform(k: usize) -> Self
Creates a Categorical distribution over [0, k) with uniform weights
sourcepub fn k(&self) -> usize
pub fn k(&self) -> usize
Get the number of possible outcomes
§Example
let cat = Categorical::uniform(4);
assert_eq!(cat.k(), 4);
sourcepub fn ln_weights(&self) -> &Vec<f64>
pub fn ln_weights(&self) -> &Vec<f64>
Get a reference to the weights
Trait Implementations§
source§impl<X: CategoricalDatum> Cdf<X> for Categorical
impl<X: CategoricalDatum> Cdf<X> for Categorical
source§impl Clone for Categorical
impl Clone for Categorical
source§fn clone(&self) -> Categorical
fn clone(&self) -> Categorical
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl<X: CategoricalDatum> ConjugatePrior<X, Categorical> for Dirichlet
impl<X: CategoricalDatum> ConjugatePrior<X, Categorical> for Dirichlet
fn posterior(&self, x: &CategoricalData<'_, X>) -> Self::Posterior
source§fn ln_m_cache(&self) -> Self::MCache
fn ln_m_cache(&self) -> Self::MCache
Compute the cache for the log marginal likelihood.
source§fn ln_m_with_cache(
&self,
cache: &Self::MCache,
x: &CategoricalData<'_, X>,
) -> f64
fn ln_m_with_cache( &self, cache: &Self::MCache, x: &CategoricalData<'_, X>, ) -> f64
Log marginal likelihood with supplied cache.
source§fn ln_pp_cache(&self, x: &CategoricalData<'_, X>) -> Self::PpCache
fn ln_pp_cache(&self, x: &CategoricalData<'_, X>) -> Self::PpCache
Compute the cache for the Log posterior predictive of y given x. Read more
source§fn ln_pp_with_cache(&self, cache: &Self::PpCache, y: &X) -> f64
fn ln_pp_with_cache(&self, cache: &Self::PpCache, y: &X) -> f64
Log posterior predictive of y given x with supplied ln(norm)
source§fn posterior_from_suffstat(&self, stat: &Fx::Stat) -> Self::Posterior
fn posterior_from_suffstat(&self, stat: &Fx::Stat) -> Self::Posterior
Computes the posterior distribution from the data
source§fn ln_m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64
fn ln_m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64
The log marginal likelihood
source§fn ln_pp(&self, y: &X, x: &DataOrSuffStat<'_, X, Fx>) -> f64
fn ln_pp(&self, y: &X, x: &DataOrSuffStat<'_, X, Fx>) -> f64
Log posterior predictive of y given x
source§fn m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64
fn m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64
Marginal likelihood of x
fn pp_with_cache(&self, cache: &Self::PpCache, y: &X) -> f64
source§impl<X: CategoricalDatum> ConjugatePrior<X, Categorical> for SymmetricDirichlet
impl<X: CategoricalDatum> ConjugatePrior<X, Categorical> for SymmetricDirichlet
fn posterior(&self, x: &CategoricalData<'_, X>) -> Self::Posterior
source§fn ln_m_cache(&self) -> Self::MCache
fn ln_m_cache(&self) -> Self::MCache
Compute the cache for the log marginal likelihood.
source§fn ln_m_with_cache(
&self,
cache: &Self::MCache,
x: &CategoricalData<'_, X>,
) -> f64
fn ln_m_with_cache( &self, cache: &Self::MCache, x: &CategoricalData<'_, X>, ) -> f64
Log marginal likelihood with supplied cache.
source§fn ln_pp_cache(&self, x: &CategoricalData<'_, X>) -> Self::PpCache
fn ln_pp_cache(&self, x: &CategoricalData<'_, X>) -> Self::PpCache
Compute the cache for the Log posterior predictive of y given x. Read more
source§fn ln_pp_with_cache(&self, cache: &Self::PpCache, y: &X) -> f64
fn ln_pp_with_cache(&self, cache: &Self::PpCache, y: &X) -> f64
Log posterior predictive of y given x with supplied ln(norm)
source§fn posterior_from_suffstat(&self, stat: &Fx::Stat) -> Self::Posterior
fn posterior_from_suffstat(&self, stat: &Fx::Stat) -> Self::Posterior
Computes the posterior distribution from the data
source§fn ln_m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64
fn ln_m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64
The log marginal likelihood
source§fn ln_pp(&self, y: &X, x: &DataOrSuffStat<'_, X, Fx>) -> f64
fn ln_pp(&self, y: &X, x: &DataOrSuffStat<'_, X, Fx>) -> f64
Log posterior predictive of y given x
source§fn m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64
fn m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64
Marginal likelihood of x
fn pp_with_cache(&self, cache: &Self::PpCache, y: &X) -> f64
source§impl Debug for Categorical
impl Debug for Categorical
source§impl<'de> Deserialize<'de> for Categorical
impl<'de> Deserialize<'de> for Categorical
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
source§impl<X: CategoricalDatum> DiscreteDistr<X> for Categorical
impl<X: CategoricalDatum> DiscreteDistr<X> for Categorical
source§impl Display for Categorical
impl Display for Categorical
source§impl From<&Categorical> for String
impl From<&Categorical> for String
source§fn from(cat: &Categorical) -> String
fn from(cat: &Categorical) -> String
Converts to this type from the input type.
source§impl HasDensity<Categorical> for Dirichlet
impl HasDensity<Categorical> for Dirichlet
source§impl HasDensity<Categorical> for SymmetricDirichlet
impl HasDensity<Categorical> for SymmetricDirichlet
source§impl<X: CategoricalDatum> HasDensity<X> for Categorical
impl<X: CategoricalDatum> HasDensity<X> for Categorical
source§impl<X: CategoricalDatum> HasSuffStat<X> for Categorical
impl<X: CategoricalDatum> HasSuffStat<X> for Categorical
source§impl KlDivergence for Categorical
impl KlDivergence for Categorical
source§impl<X: CategoricalDatum> Mode<X> for Categorical
impl<X: CategoricalDatum> Mode<X> for Categorical
source§impl Parameterized for Categorical
impl Parameterized for Categorical
type Parameters = CategoricalParameters
fn emit_params(&self) -> Self::Parameters
fn from_params(params: Self::Parameters) -> Self
source§impl PartialEq for Categorical
impl PartialEq for Categorical
source§fn eq(&self, other: &Categorical) -> bool
fn eq(&self, other: &Categorical) -> bool
This method tests for
self
and other
values to be equal, and is used
by ==
.source§impl PartialOrd for Categorical
impl PartialOrd for Categorical
source§fn partial_cmp(&self, other: &Categorical) -> Option<Ordering>
fn partial_cmp(&self, other: &Categorical) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for
self
and other
) and is used by the <=
operator. Read moresource§impl Sampleable<Categorical> for Dirichlet
impl Sampleable<Categorical> for Dirichlet
source§impl Sampleable<Categorical> for SymmetricDirichlet
impl Sampleable<Categorical> for SymmetricDirichlet
source§impl<X: CategoricalDatum> Sampleable<X> for Categorical
impl<X: CategoricalDatum> Sampleable<X> for Categorical
source§impl Serialize for Categorical
impl Serialize for Categorical
source§impl<X: CategoricalDatum> Support<X> for Categorical
impl<X: CategoricalDatum> Support<X> for Categorical
impl StructuralPartialEq for Categorical
Auto Trait Implementations§
impl Freeze for Categorical
impl RefUnwindSafe for Categorical
impl Send for Categorical
impl Sync for Categorical
impl Unpin for Categorical
impl UnwindSafe for Categorical
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
source§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 moresource§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).source§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.source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self
to the equivalent element of its superset.