Reduce 1-D array into a single value.
Run the benchmark locally with (the script prints plain finite-data results first, then NaN-aware results):
uv run --extra bench python benchmarks/benchmark_1d.py
The benchmark prints one row per (length, dtype, function). np, bn, and rd are trimmed median elapsed µs for NumPy, Bottleneck, and reducers: the fastest and slowest samples are dropped before taking the median. The np/rd and bn/rd columns are speedups relative to reducers; a value above 1 means reducers is faster. A speedup is bolded when reducers ratio > 0.95.
Each run uses 3 warmups and 15 repeats by default.
average rows use one weight per value, generated from a uniform distribution on [0.5, 1.5). The percentile/quantile rows (and their nan* forms) request three positions, [16, 50, 84] (the median and +/-1 sigma).
Plain, float64
These rows compare the plain path on finite data. std uses ddof=1. For average, Bottleneck has no weighted-average reducer.
mean
1.15
0.13
9.11x
average
2.81
0.29
9.62x
median
4.72
0.25
18.70x
sum
0.80
0.14
5.89x
min
0.79
0.14
5.80x
max
0.80
0.14
5.70x
minmax
1.62
0.15
10.57x
var
3.70
0.19
19.54x
std
3.94
0.25
15.80x
percentile
14.38
3.58
4.02x
quantile
14.01
3.82
3.67x
mean
1.18
0.14
8.42x
average
2.79
0.31
8.86x
median
4.87
0.37
13.06x
sum
0.78
0.13
6.09x
min
0.81
0.15
5.57x
max
0.79
0.14
5.64x
minmax
1.62
0.17
9.66x
var
3.60
0.20
17.64x
std
3.86
0.27
14.21x
percentile
14.48
3.92
3.69x
quantile
13.97
4.23
3.30x
mean
2.46
1.53
1.61x
average
7.89
2.34
3.37x
median
28.92
15.96
1.81x
sum
2.00
1.53
1.31x
min
1.37
1.40
0.98x
max
1.35
1.40
0.96x
minmax
2.75
1.71
1.60x
var
9.28
3.61
2.57x
std
9.73
3.86
2.52x
percentile
51.84
39.41
1.32x
quantile
50.49
39.32
1.28x
mean
1242.83
1405.92
0.88x
average
4483.08
1895.38
2.37x
median
70200.50
15501.21
4.53x
sum
1249.71
1412.08
0.89x
min
951.12
397.88
2.39x
max
966.00
420.12
2.30x
minmax
1912.75
425.13
4.50x
var
5283.50
3547.08
1.49x
std
5274.63
3551.08
1.49x
percentile
114862.92
37314.75
3.08x
quantile
116236.92
37130.62
3.13x
Plain, float32
These rows compare the plain path on finite float32 data. std uses ddof=1. For average, Bottleneck has no weighted-average reducer.
mean
1.95
0.15
13.29x
average
2.66
0.33
8.11x
median
5.47
0.23
23.40x
sum
0.77
0.15
5.27x
min
0.77
0.15
5.04x
max
0.77
0.15
5.10x
minmax
1.56
0.17
9.22x
var
4.53
0.20
22.91x
std
4.91
0.26
18.59x
percentile
14.51
3.52
4.13x
quantile
14.26
3.80
3.76x
mean
1.94
0.17
11.71x
average
2.74
0.36
7.64x
median
5.74
0.38
15.28x
sum
0.77
0.15
5.01x
min
0.80
0.16
4.87x
max
0.78
0.16
4.93x
minmax
1.62
0.18
8.79x
var
4.54
0.23
19.77x
std
4.89
0.29
16.89x
percentile
14.75
3.86
3.82x
quantile
14.11
4.21
3.35x
mean
3.21
1.67
1.92x
average
6.58
3.44
1.91x
median
29.79
14.69
2.03x
sum
1.90
1.71
1.11x
min
1.03
1.40
0.74x
max
1.01
1.39
0.72x
minmax
2.08
1.71
1.22x
var
8.46
3.97
2.13x
std
8.92
3.97
2.24x
percentile
50.17
37.05
1.35x
quantile
50.16
37.03
1.35x
mean
1149.54
1644.46
0.70x
average
3323.54
3105.29
1.07x
median
77016.87
14371.58
5.36x
sum
1143.33
1593.33
0.72x
min
439.37
318.08
1.38x
max
453.38
308.62
1.47x
minmax
883.67
357.13
2.47x
var
3592.25
3757.00
0.96x
std
3614.29
3708.42
0.97x
percentile
114627.62
35568.00
3.22x
quantile
114870.21
35316.00
3.25x
NaN-aware, float64
These rows compare rd.nan* against np.nan* and bn.nan*. nanstd uses ddof=1. For nanaverage, the NumPy baseline masks a and weights before calling np.average; Bottleneck has no weighted-average reducer.
nanmean
4.25
0.07
0.15
28.82x
0.49x
nanaverage
3.06
-
0.30
10.08x
-
nanmedian
6.47
0.10
0.24
26.92x
0.43x
nansum
1.74
0.07
0.15
11.84x
0.49x
nanmin
1.55
0.06
0.15
10.60x
0.39x
nanmax
1.57
0.06
0.15
10.71x
0.39x
nanminmax
3.14
0.11
0.17
19.00x
0.67x
nanvar
9.57
0.12
0.20
47.22x
0.59x
nanstd
10.35
0.16
0.29
36.11x
0.57x
nanpercentile
16.65
-
3.50
4.76x
-
nanquantile
16.08
-
3.79
4.24x
-
nanmean
4.33
0.16
0.17
25.06x
0.92x
nanaverage
3.18
-
0.32
9.88x
-
nanmedian
6.79
0.21
0.36
18.69x
0.59x
nansum
1.76
0.15
0.16
11.07x
0.97x
nanmin
1.59
0.09
0.16
10.28x
0.56x
nanmax
1.58
0.09
0.16
9.86x
0.55x
nanminmax
3.26
0.17
0.18
18.13x
0.93x
nanvar
9.62
0.29
0.24
39.57x
1.20x
nanstd
10.22
0.35
0.31
32.49x
1.10x
nanpercentile
26.78
-
4.04
6.63x
-
nanquantile
16.75
-
5.62
2.98x
-
nanmean
17.68
19.39
5.89
3.00x
3.29x
nanaverage
20.52
-
3.40
6.04x
-
nanmedian
37.00
23.96
20.74
1.78x
1.16x
nansum
8.51
14.79
3.99
2.13x
3.70x
nanmin
2.28
5.23
1.45
1.58x
3.62x
nanmax
2.29
5.31
1.55
1.48x
3.43x
nanminmax
5.70
10.27
1.83
3.11x
5.61x
nanvar
35.03
31.62
7.16
4.89x
4.41x
nanstd
34.39
34.96
8.14
4.23x
4.30x
nanpercentile
67.52
-
57.25
1.18x
-
nanquantile
80.25
-
42.12
1.91x
-
nanmean
6860.37
12986.58
5381.96
1.27x
2.41x
nanaverage
12966.96
-
2600.71
4.99x
-
nanmedian
55754.29
62285.00
17180.88
3.25x
3.63x
nansum
5483.00
12445.46
3228.96
1.70x
3.85x
nanmin
973.17
5182.71
423.42
2.30x
12.24x
nanmax
955.54
5059.75
437.67
2.18x
11.56x
nanminmax
1976.50
9903.83
407.29
4.85x
24.32x
nanvar
17407.50
25080.29
6146.75
2.83x
4.08x
nanstd
17286.87
24883.71
6145.12
2.81x
4.05x
nanpercentile
118428.96
-
38616.58
3.07x
-
nanquantile
118718.75
-
38961.83
3.05x
-
NaN-aware, float32
These rows compare float32 rd.nan* against np.nan* and bn.nan*. nanstd uses ddof=1. For nanaverage, the NumPy baseline masks a and weights before calling np.average; Bottleneck has no weighted-average reducer.
nanmean
5.32
0.07
0.18
30.27x
0.42x
nanaverage
3.17
-
0.36
8.81x
-
nanmedian
9.78
0.11
0.26
38.22x
0.41x
nansum
1.83
0.07
0.17
10.81x
0.43x
nanmin
1.61
0.06
0.17
9.56x
0.37x
nanmax
1.59
0.06
0.17
9.31x
0.33x
nanminmax
3.18
0.11
0.18
17.33x
0.60x
nanvar
10.80
0.12
0.24
44.89x
0.50x
nanstd
11.36
0.16
0.29
39.84x
0.56x
nanpercentile
17.05
-
3.49
4.88x
-
nanquantile
17.03
-
3.85
4.42x
-
nanmean
5.30
0.16
0.19
28.19x
0.83x
nanaverage
3.25
-
0.38
8.46x
-
nanmedian
7.92
0.21
0.38
20.87x
0.56x
nansum
1.82
0.15
0.18
9.92x
0.84x
nanmin
1.60
0.09
0.18
9.08x
0.51x
nanmax
1.56
0.09
0.18
8.69x
0.49x
nanminmax
3.14
0.17
0.20
15.54x
0.82x
nanvar
11.39
0.30
0.27
42.08x
1.12x
nanstd
11.64
0.34
0.33
35.53x
1.03x
nanpercentile
17.44
-
3.97
4.40x
-
nanquantile
16.96
-
4.23
4.01x
-
nanmean
12.26
11.44
3.18
3.85x
3.60x
nanaverage
14.80
-
3.86
3.83x
-
nanmedian
32.12
20.91
17.91
1.79x
1.17x
nansum
6.11
12.31
2.98
2.05x
4.13x
nanmin
1.85
4.77
1.37
1.35x
3.48x
nanmax
1.87
4.50
1.24
1.50x
3.62x
nanminmax
3.83
9.52
1.62
2.36x
5.86x
nanvar
27.69
25.00
6.33
4.37x
3.95x
nanstd
27.56
25.06
6.18
4.46x
4.05x
nanpercentile
56.69
-
39.34
1.44x
-
nanquantile
57.54
-
39.80
1.45x
-
nanmean
5383.63
11343.13
3067.08
1.76x
3.70x
nanaverage
10844.63
-
3854.04
2.81x
-
nanmedian
74681.58
58510.08
14937.17
5.00x
3.92x
nansum
3568.08
11215.92
3017.08
1.18x
3.72x
nanmin
426.00
4730.37
308.08
1.38x
15.35x
nanmax
449.50
4656.54
310.79
1.45x
14.98x
nanminmax
907.71
9253.00
318.00
2.85x
29.10x
nanvar
14054.17
24633.04
5999.33
2.34x
4.11x
nanstd
14135.12
25003.75
5960.54
2.37x
4.19x
nanpercentile
111802.79
-
35897.71
3.11x
-
nanquantile
110976.12
-
35670.29
3.11x
-