1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64# Mixture Distributions
[![Build Status][build-img]][build-link]
[![mix-distribution][cratesio-img]][cratesio-link]
[![mix-distribution][docsrs-img]][docsrs-link]
[build-img]: https://travis-ci.com/ordovicia/mix-distribution.svg?branch=master
[build-link]: https://travis-ci.com/ordovicia/mix-distribution
[cratesio-img]: https://img.shields.io/crates/v/mix-distribution.svg
[cratesio-link]: https://crates.io/crates/mix-distribution
[docsrs-img]: https://docs.rs/mix-distribution/badge.svg
[docsrs-link]: https://docs.rs/mix-distribution
## Examples
```rust
use rand_distr::{Distribution, Normal};
use mix_distribution::Mix;
let mut rng = rand::thread_rng();
// Mixture of two distributions
let mix = {
let dists = vec![
Normal::new(0.0, 1.0).unwrap(),
Normal::new(1.0, 2.0).unwrap(),
];
let weights = &[2, 1];
Mix::new(dists, weights).unwrap()
};
mix.sample(&mut rng);
// Mixture of three distributions
let mix = {
let dists = vec![
Normal::new(0.0, 1.0).unwrap(),
Normal::new(1.0, 2.0).unwrap(),
Normal::new(-1.0, 1.0).unwrap(),
];
let weights = &[2, 1, 3];
Mix::new(dists, weights).unwrap()
};
mix.sample(&mut rng);
// From iterator over (distribution, weight) pairs
let mix = Mix::with_zip(vec![
(Uniform::new_inclusive(0, 0), 2),
(Uniform::new_inclusive(1, 1), 1),
])
.unwrap();
mix.sample(&mut rng);
```
## License
Copyright 2018 Hidehito Yabuuchi \<hdht.ybuc@gmail.com\>
Licensed under the MIT license <LICENSE-MIT or http://opensource.org/licenses/MIT>, or the Apache
License, Version 2.0 <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> at your option.
All files in the project carrying such notice may not be copied, modified, or distributed except
according to those terms.