15 unstable releases (6 breaking)

✓ Uses Rust 2018 edition

0.7.0-rc1 Aug 8, 2019
0.6.1 Jun 16, 2019
0.5.2 May 23, 2019
0.4.1 Sep 15, 2018
0.1.2 Jul 15, 2018

#6 in Machine learning

Download history 14/week @ 2019-04-25 2/week @ 2019-05-02 20/week @ 2019-05-09 23/week @ 2019-05-16 79/week @ 2019-05-23 40/week @ 2019-05-30 56/week @ 2019-06-06 73/week @ 2019-06-13 112/week @ 2019-06-20 171/week @ 2019-06-27 92/week @ 2019-07-04 190/week @ 2019-07-11 15/week @ 2019-07-18 24/week @ 2019-07-25 13/week @ 2019-08-01

304 downloads per month
Used in 2 crates

MIT license

410KB
11K SLoC

rv

Random variables for rust. rv offers basic functionality for many probability distributions.

Design

Random variables are designed to be flexible. For example, we don't just want a Beta distribution that works with f64; we want it to work with a bunch of things like

extern crate rand;
extern crate rv;

use rv::prelude::*;

// Beta(0.5, 0.5)
let beta = Beta::jeffreys();

let mut rng = rand::thread_rng();

// 100 f64 weights in (0, 1)
let f64s: Vec<f64> = beta.sample(100, &mut rng);
let pdf_x = beta.ln_pdf(&f64s[42]);

// 100 f32 weights in (0, 1)
let f32s: Vec<f32> = beta.sample(100, &mut rng);
let pdf_y = beta.ln_pdf(&f32s[42]);

// 100 Bernoulli distributions -- Beta is a prior on the weight
let berns: Vec<Bernoulli> = beta.sample(100, &mut rng);
let pdf_bern = beta.ln_pdf(&berns[42]);

For more interesting examples, including use in machine learning, see examples/.

Contributing

  1. Please create an issue before starting any work. We're far from stable, so we might actually be working on what you want, or we might be working on something that will change the way you might implement it.
  2. If you plan on implementing a new distribution, implement at least Rv, Support, and either ContinuousDistr or DiscreteDistr. Of course, more is better!
  3. Implement new distributions for the appropriate types. For example, don't just implement Rv<f64>, also implement Rv<f32>. Check out other distributions to see how it can be done easily with macros.
  4. Write tests, docs, and doc tests.
  5. Use rustfmt. We've included a .rustfmt.toml in the project directory.

Dependencies

~3MB
~62K SLoC