pub struct MultivariateNormal {
pub mean: Array1<f64>,
pub cov: Array2<f64>,
pub dim: usize,
/* private fields */
}Expand description
Multivariate Normal distribution structure
Fields§
§mean: Array1<f64>Mean vector
cov: Array2<f64>Covariance matrix
dim: usizeDimensionality of the distribution
Implementations§
Source§impl MultivariateNormal
impl MultivariateNormal
Sourcepub fn new<D1, D2>(
mean: ArrayBase<D1, Ix1>,
cov: ArrayBase<D2, Ix2>,
) -> StatsResult<Self>
pub fn new<D1, D2>( mean: ArrayBase<D1, Ix1>, cov: ArrayBase<D2, Ix2>, ) -> StatsResult<Self>
Create a new multivariate normal distribution with given mean vector and covariance matrix
§Arguments
mean- Mean vector (k-dimensional)cov- Covariance matrix (k x k, symmetric positive-definite)
§Returns
- A new MultivariateNormal distribution instance
§Examples
use scirs2_core::ndarray::{array, Array1, Array2};
use scirs2_stats::distributions::multivariate::normal::MultivariateNormal;
// Create a 2D multivariate normal distribution
let mean = array![0.0, 0.0];
let cov = array![[1.0, 0.5], [0.5, 2.0]];
let mvn = MultivariateNormal::new(mean, cov).expect("Operation failed");Sourcepub fn pdf<D>(&self, x: &ArrayBase<D, Ix1>) -> f64
pub fn pdf<D>(&self, x: &ArrayBase<D, Ix1>) -> f64
Calculate the probability density function (PDF) at a given point
§Arguments
x- The point at which to evaluate the PDF
§Returns
- The value of the PDF at the given point
§Examples
use scirs2_core::ndarray::array;
use scirs2_stats::distributions::multivariate::normal::MultivariateNormal;
let mean = array![0.0, 0.0];
let cov = array![[1.0, 0.0], [0.0, 1.0]];
let mvn = MultivariateNormal::new(mean, cov).expect("Operation failed");
// PDF at origin for a standard 2D normal should be 1/(2π)
let pdf_at_origin = mvn.pdf(&array![0.0, 0.0]);
assert!((pdf_at_origin - 0.15915494).abs() < 1e-7); // 1/(2π) ≈ 0.15915494Sourcepub fn rvs(&self, size: usize) -> StatsResult<Array2<f64>>
pub fn rvs(&self, size: usize) -> StatsResult<Array2<f64>>
Generate random samples from the distribution
§Arguments
size- Number of samples to generate
§Returns
- Matrix where each row is a random sample
§Examples
use scirs2_core::ndarray::array;
use scirs2_stats::distributions::multivariate::normal::MultivariateNormal;
let mean = array![0.0, 0.0];
let cov = array![[1.0, 0.5], [0.5, 2.0]];
let mvn = MultivariateNormal::new(mean, cov).expect("Operation failed");
let samples = mvn.rvs(100).expect("Operation failed");
assert_eq!(samples.shape(), &[100, 2]);Sourcepub fn rvs_single(&self) -> StatsResult<Array1<f64>>
pub fn rvs_single(&self) -> StatsResult<Array1<f64>>
Generate a single random sample from the distribution
§Returns
- Vector representing a single sample
§Examples
use scirs2_core::ndarray::array;
use scirs2_stats::distributions::multivariate::normal::MultivariateNormal;
let mean = array![0.0, 0.0];
let cov = array![[1.0, 0.5], [0.5, 2.0]];
let mvn = MultivariateNormal::new(mean, cov).expect("Operation failed");
let sample = mvn.rvs_single().expect("Operation failed");
assert_eq!(sample.len(), 2);Sourcepub fn logpdf<D>(&self, x: &ArrayBase<D, Ix1>) -> f64
pub fn logpdf<D>(&self, x: &ArrayBase<D, Ix1>) -> f64
Calculate the log probability density function (log PDF) at a given point
§Arguments
x- The point at which to evaluate the log PDF
§Returns
- The value of the log PDF at the given point
§Examples
use scirs2_core::ndarray::array;
use scirs2_stats::distributions::multivariate::normal::MultivariateNormal;
let mean = array![0.0, 0.0];
let cov = array![[1.0, 0.0], [0.0, 1.0]];
let mvn = MultivariateNormal::new(mean, cov).expect("Operation failed");
let log_pdf = mvn.logpdf(&array![0.0, 0.0]);
assert!((log_pdf - (-1.8378770664093453)).abs() < 1e-7); // ln(1/(2π)) ≈ -1.837877Sourcepub fn cov(&self) -> ArrayView2<'_, f64>
pub fn cov(&self) -> ArrayView2<'_, f64>
Get the covariance matrix of the distribution
Sourcepub fn mean(&self) -> ArrayView1<'_, f64>
pub fn mean(&self) -> ArrayView1<'_, f64>
Get the mean vector of the distribution
Trait Implementations§
Source§impl Clone for MultivariateNormal
impl Clone for MultivariateNormal
Source§fn clone(&self) -> MultivariateNormal
fn clone(&self) -> MultivariateNormal
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for MultivariateNormal
impl Debug for MultivariateNormal
Source§impl Distribution<f64> for MultivariateNormal
impl Distribution<f64> for MultivariateNormal
Source§impl MultivariateDistribution<f64> for MultivariateNormal
impl MultivariateDistribution<f64> for MultivariateNormal
Source§fn pdf(&self, x: &Array1<f64>) -> f64
fn pdf(&self, x: &Array1<f64>) -> f64
Probability density function for multivariate distributions Read more
Source§fn rvs(&self, size: usize) -> StatsResult<Array2<f64>>
fn rvs(&self, size: usize) -> StatsResult<Array2<f64>>
Generate random samples from the multivariate distribution Read more
Source§fn logpdf(&self, x: &Array1<f64>) -> f64
fn logpdf(&self, x: &Array1<f64>) -> f64
Log probability density function for multivariate distributions
Source§fn rvs_single(&self) -> StatsResult<Vec<f64>>
fn rvs_single(&self) -> StatsResult<Vec<f64>>
Generate a single random sample from the multivariate distribution
Auto Trait Implementations§
impl Freeze for MultivariateNormal
impl RefUnwindSafe for MultivariateNormal
impl Send for MultivariateNormal
impl Sync for MultivariateNormal
impl Unpin for MultivariateNormal
impl UnsafeUnpin for MultivariateNormal
impl UnwindSafe for MultivariateNormal
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§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.