Trait average::Merge [−][src]
Expand description
Merge with another estimator.
Required methods
fn merge(&mut self, other: &Self)
[src]
Expand description
Merge the other estimator into this one.
Both estimators are assumed to be fed samples from the same population.
This method is useful for parallelizing the calculation of estimates:
use average::{Estimate, Mean, Merge}; let data = &[1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]; let mut thread1 = std::thread::spawn(move || -> Mean { let mut avg = Mean::new(); for &x in &data[..5] { avg.add(x); } avg }); let mut thread2 = std::thread::spawn(move || -> Mean { let mut avg = Mean::new(); for &x in &data[5..] { avg.add(x); } avg }); let mut avg = thread1.join().unwrap(); avg.merge(&thread2.join().unwrap()); assert_eq!(avg.mean(), 5.5);
Implementors
impl Merge for Max
[src]
impl Merge for Max
[src]fn merge(&mut self, other: &Max)
[src]
fn merge(&mut self, other: &Max)
[src]Merge another sample into this one.
Example
use average::{Max, Merge}; let sequence: &[f64] = &[1., 2., 3., 4., 5., 6., 7., 8., 9.]; let (left, right) = sequence.split_at(3); let max_total: Max = sequence.iter().collect(); let mut max_left: Max = left.iter().collect(); let max_right: Max = right.iter().collect(); max_left.merge(&max_right); assert_eq!(max_total.max(), max_left.max());
impl Merge for Mean
[src]
impl Merge for Mean
[src]fn merge(&mut self, other: &Mean)
[src]
fn merge(&mut self, other: &Mean)
[src]Merge another sample into this one.
Example
use average::{Mean, Merge}; let sequence: &[f64] = &[1., 2., 3., 4., 5., 6., 7., 8., 9.]; let (left, right) = sequence.split_at(3); let avg_total: Mean = sequence.iter().collect(); let mut avg_left: Mean = left.iter().collect(); let avg_right: Mean = right.iter().collect(); avg_left.merge(&avg_right); assert_eq!(avg_total.mean(), avg_left.mean());
impl Merge for Min
[src]
impl Merge for Min
[src]fn merge(&mut self, other: &Min)
[src]
fn merge(&mut self, other: &Min)
[src]Merge another sample into this one.
Example
use average::{Min, Merge}; let sequence: &[f64] = &[1., 2., 3., 4., 5., 6., 7., 8., 9.]; let (left, right) = sequence.split_at(3); let min_total: Min = sequence.iter().collect(); let mut min_left: Min = left.iter().collect(); let min_right: Min = right.iter().collect(); min_left.merge(&min_right); assert_eq!(min_total.min(), min_left.min());
impl Merge for Variance
[src]
impl Merge for Variance
[src]fn merge(&mut self, other: &Variance)
[src]
fn merge(&mut self, other: &Variance)
[src]Merge another sample into this one.
Example
use average::{Variance, Merge}; let sequence: &[f64] = &[1., 2., 3., 4., 5., 6., 7., 8., 9.]; let (left, right) = sequence.split_at(3); let avg_total: Variance = sequence.iter().collect(); let mut avg_left: Variance = left.iter().collect(); let avg_right: Variance = right.iter().collect(); avg_left.merge(&avg_right); assert_eq!(avg_total.mean(), avg_left.mean()); assert_eq!(avg_total.sample_variance(), avg_left.sample_variance());
impl Merge for WeightedMean
[src]
impl Merge for WeightedMean
[src]fn merge(&mut self, other: &WeightedMean)
[src]
fn merge(&mut self, other: &WeightedMean)
[src]Merge another sample into this one.
Example
use average::{WeightedMean, Merge}; let weighted_sequence: &[(f64, f64)] = &[ (1., 0.1), (2., 0.2), (3., 0.3), (4., 0.4), (5., 0.5), (6., 0.6), (7., 0.7), (8., 0.8), (9., 0.9)]; let (left, right) = weighted_sequence.split_at(3); let avg_total: WeightedMean = weighted_sequence.iter().collect(); let mut avg_left: WeightedMean = left.iter().collect(); let avg_right: WeightedMean = right.iter().collect(); avg_left.merge(&avg_right); assert!((avg_total.mean() - avg_left.mean()).abs() < 1e-15);
impl Merge for WeightedMeanWithError
[src]
impl Merge for WeightedMeanWithError
[src]fn merge(&mut self, other: &WeightedMeanWithError)
[src]
fn merge(&mut self, other: &WeightedMeanWithError)
[src]Merge another sample into this one.
Example
use average::{WeightedMeanWithError, Merge}; let weighted_sequence: &[(f64, f64)] = &[ (1., 0.1), (2., 0.2), (3., 0.3), (4., 0.4), (5., 0.5), (6., 0.6), (7., 0.7), (8., 0.8), (9., 0.9)]; let (left, right) = weighted_sequence.split_at(3); let avg_total: WeightedMeanWithError = weighted_sequence.iter().collect(); let mut avg_left: WeightedMeanWithError = left.iter().collect(); let avg_right: WeightedMeanWithError = right.iter().collect(); avg_left.merge(&avg_right); assert!((avg_total.weighted_mean() - avg_left.weighted_mean()).abs() < 1e-15); assert!((avg_total.error() - avg_left.error()).abs() < 1e-15);