forked from statrs-dev/statrs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
order_statistics.rs
93 lines (91 loc) · 2.83 KB
/
order_statistics.rs
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
extern crate rand;
extern crate statrs;
use criterion::{black_box, criterion_group, criterion_main, BatchSize, Criterion};
use rand::prelude::*;
use statrs::statistics::*;
fn bench_order_statistic(c: &mut Criterion) {
let mut rng = thread_rng();
let to_random_owned = |data: &[f64]| -> Vec<f64> {
let mut rng = thread_rng();
let mut owned = data.to_vec();
owned.shuffle(&mut rng);
owned
};
let k = black_box(rng.gen());
let tau = black_box(rng.gen_range(0.0, 1.0));
let mut group = c.benchmark_group("order statistic");
let data: Vec<_> = (0..100).map(|x| x as f64).collect();
group.bench_function("order_statistic", |b| {
b.iter_batched(
|| to_random_owned(&data),
|mut data| data.order_statistic(k),
BatchSize::SmallInput,
)
});
group.bench_function("median", |b| {
b.iter_batched(
|| to_random_owned(&data),
|data| data.median(),
BatchSize::SmallInput,
)
});
group.bench_function("quantile", |b| {
b.iter_batched(
|| to_random_owned(&data),
|mut data| data.quantile(tau),
BatchSize::SmallInput,
)
});
group.bench_function("percentile", |b| {
b.iter_batched(
|| to_random_owned(&data),
|mut data| data.percentile(k),
BatchSize::SmallInput,
)
});
group.bench_function("lower_quartile", |b| {
b.iter_batched(
|| to_random_owned(&data),
|mut data| data.lower_quartile(),
BatchSize::SmallInput,
)
});
group.bench_function("upper_quartile", |b| {
b.iter_batched(
|| to_random_owned(&data),
|mut data| data.upper_quartile(),
BatchSize::SmallInput,
)
});
group.bench_function("interquartile_range", |b| {
b.iter_batched(
|| to_random_owned(&data),
|mut data| data.interquartile_range(),
BatchSize::SmallInput,
)
});
group.bench_function("ranks: RankTieBreaker::First", |b| {
b.iter_batched(
|| to_random_owned(&data),
|mut data| data.ranks(RankTieBreaker::First),
BatchSize::SmallInput,
)
});
group.bench_function("ranks: RankTieBreaker::Average", |b| {
b.iter_batched(
|| to_random_owned(&data),
|mut data| data.ranks(RankTieBreaker::Average),
BatchSize::SmallInput,
)
});
group.bench_function("ranks: RankTieBreaker::Min", |b| {
b.iter_batched(
|| to_random_owned(&data),
|mut data| data.ranks(RankTieBreaker::Min),
BatchSize::SmallInput,
)
});
group.finish();
}
criterion_group!(benches, bench_order_statistic);
criterion_main!(benches);