modppl 0.3.0

a experimental library for probabilistic programming in Rust.
Documentation
use nalgebra::{DVector, DMatrix};

pub fn hmm_forward_alg(
    prior: DVector<f64>,
    emission_dists: DMatrix<f64>,
    transition_dists: DMatrix<f64>,
    observations: &Vec<usize>
) -> f64 {
    assert_eq!(prior.nrows(), emission_dists.ncols());
    assert_eq!(prior.nrows(), transition_dists.ncols());
    assert_eq!(transition_dists.nrows(), transition_dists.ncols());
    let mut marginal_likelihood = 1.0;
    let mut alpha: DVector<f64> = prior.clone();
    for obs in observations.into_iter() {
        let likelihoods = emission_dists.row(*obs).transpose();
        let mut prev_posterior = alpha.component_mul(&likelihoods);
        let evidence = prev_posterior.sum();
        prev_posterior /= evidence;
        alpha = &transition_dists * prev_posterior;
        marginal_likelihood *= evidence;
    }
    marginal_likelihood
}