aboutsummaryrefslogtreecommitdiff
path: root/src/stats/univariate/mixed.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/stats/univariate/mixed.rs')
-rwxr-xr-xsrc/stats/univariate/mixed.rs61
1 files changed, 41 insertions, 20 deletions
diff --git a/src/stats/univariate/mixed.rs b/src/stats/univariate/mixed.rs
index 5c0a59f..d6b845d 100755
--- a/src/stats/univariate/mixed.rs
+++ b/src/stats/univariate/mixed.rs
@@ -4,6 +4,7 @@ use crate::stats::float::Float;
use crate::stats::tuple::{Tuple, TupledDistributionsBuilder};
use crate::stats::univariate::Resamples;
use crate::stats::univariate::Sample;
+#[cfg(feature = "rayon")]
use rayon::prelude::*;
/// Performs a *mixed* two-sample bootstrap
@@ -27,31 +28,51 @@ where
c.extend_from_slice(b);
let c = Sample::new(&c);
- (0..nresamples)
- .into_par_iter()
- .map_init(
- || Resamples::new(c),
- |resamples, _| {
+ #[cfg(feature = "rayon")]
+ {
+ (0..nresamples)
+ .into_par_iter()
+ .map_init(
+ || Resamples::new(c),
+ |resamples, _| {
+ let resample = resamples.next();
+ let a: &Sample<A> = Sample::new(&resample[..n_a]);
+ let b: &Sample<A> = Sample::new(&resample[n_a..]);
+
+ statistic(a, b)
+ },
+ )
+ .fold(
+ || T::Builder::new(0),
+ |mut sub_distributions, sample| {
+ sub_distributions.push(sample);
+ sub_distributions
+ },
+ )
+ .reduce(
+ || T::Builder::new(0),
+ |mut a, mut b| {
+ a.extend(&mut b);
+ a
+ },
+ )
+ .complete()
+ }
+ #[cfg(not(feature = "rayon"))]
+ {
+ let mut resamples = Resamples::new(c);
+ (0..nresamples)
+ .map(|_| {
let resample = resamples.next();
let a: &Sample<A> = Sample::new(&resample[..n_a]);
let b: &Sample<A> = Sample::new(&resample[n_a..]);
statistic(a, b)
- },
- )
- .fold(
- || T::Builder::new(0),
- |mut sub_distributions, sample| {
+ })
+ .fold(T::Builder::new(0), |mut sub_distributions, sample| {
sub_distributions.push(sample);
sub_distributions
- },
- )
- .reduce(
- || T::Builder::new(0),
- |mut a, mut b| {
- a.extend(&mut b);
- a
- },
- )
- .complete()
+ })
+ .complete()
+ }
}