Skip to main content

1-D Array Benchmarks

Recorded 2026-09-08, reducers 0.4.0 + overflow fix (eb27fc0). Environment and setup · Complete output · Excluded baselines

uv run --no-sync python benchmarks/benchmark_1d.py --repeats 15 --warmups 3

Times are median microseconds per call over 15 samples after 3 warmups; the lowest and highest samples are discarded. Short inputs batch repeated calls using max(1, min(100000, 1000000 // length)) calls per sample. Ratios above 1 favor reducers; bold means a ratio above 0.95 (within 5%). - means unavailable; n/a means the baseline failed the accuracy check. Ratios use unrounded times.

Inputs are prebuilt contiguous arrays; reducers uses validate=False. Weights are uniform on [0.5, 1.5). var uses ddof=0, std uses ddof=1. Percentile requests [16, 50, 84]; quantile requests [0.16, 0.50, 0.84]. NaN-aware inputs contain sparse NaNs. For NumPy nanaverage, the validity mask is prepared before timing; selecting values and weights is timed.

Plain, float64

function np (µs) bn (µs) rd (µs) np/rd bn/rd
mean 1.18 - 0.13 9.39x -
average 2.74 - 0.28 9.63x -
median 4.54 0.12 0.25 18.18x 0.50x
sum 0.82 - 0.18 4.63x -
min 0.82 - 0.13 6.26x -
max 0.83 - 0.14 6.10x -
minmax 1.65 - 0.15 11.05x -
var 3.49 - 0.17 19.93x -
std 3.81 - 0.25 15.52x -
percentile 14.25 - 3.51 4.06x -
quantile 13.86 - 3.91 3.54x -
function np (µs) bn (µs) rd (µs) np/rd bn/rd
mean 1.16 - 0.14 8.53x -
average 2.76 - 0.31 8.98x -
median 4.92 0.19 0.52 9.42x 0.37x
sum 0.84 - 0.18 4.61x -
min 0.86 - 0.16 5.56x -
max 0.85 - 0.15 5.62x -
minmax 1.73 - 0.18 9.70x -
var 3.68 - 0.21 17.53x -
std 3.95 - 0.28 14.13x -
percentile 14.88 - 4.17 3.57x -
quantile 13.82 - 4.31 3.21x -
function np (µs) bn (µs) rd (µs) np/rd bn/rd
mean 2.44 - 1.53 1.60x -
average 7.79 - 2.31 3.37x -
median 28.88 18.49 28.63 1.01x 0.65x
sum 1.97 - 1.80 1.09x -
min 1.34 - 2.35 0.57x -
max 1.39 - 2.19 0.63x -
minmax 2.74 - 3.10 0.88x -
var 9.38 - 3.76 2.49x -
std 9.61 - 3.89 2.47x -
percentile 51.95 - 47.41 1.10x -
quantile 50.17 - 47.38 1.06x -
function np (µs) bn (µs) rd (µs) np/rd bn/rd
mean 1198.33 - 1353.00 0.89x -
average 4569.13 - 1872.87 2.44x -
median 70134.54 67513.58 28021.33 2.50x 2.41x
sum 1229.21 - 1368.46 0.90x -
min 897.17 - 508.63 1.76x -
max 939.21 - 504.37 1.86x -
minmax 1864.04 - 551.83 3.38x -
var 5038.17 - 3585.33 1.41x -
std 5194.33 - 3643.00 1.43x -
percentile 114479.79 - 45393.58 2.52x -
quantile 114218.25 - 45280.83 2.52x -

Plain, float32

function np (µs) bn (µs) rd (µs) np/rd bn/rd
mean 1.90 - 0.14 13.32x -
average 2.68 - 0.33 8.11x -
median 5.46 0.12 0.27 20.45x 0.44x
sum 0.82 - 0.19 4.20x -
min 0.80 - 0.15 5.44x -
max 0.81 - 0.15 5.47x -
minmax 1.65 - 0.16 10.17x -
var 4.51 - 0.20 23.02x -
std 4.96 - 0.26 18.96x -
percentile 14.45 - 3.54 4.08x -
quantile 14.00 - 3.89 3.60x -
function np (µs) bn (µs) rd (µs) np/rd bn/rd
mean 2.00 - 0.16 12.81x -
average 2.72 - 0.36 7.66x -
median 5.59 0.23 0.51 11.04x 0.45x
sum 0.82 - 0.20 4.15x -
min 0.83 - 0.17 5.03x -
max 0.85 - 0.15 5.62x -
minmax 1.66 - 0.18 9.48x -
var 4.59 - 0.24 19.29x -
std 4.99 - 0.31 16.09x -
percentile 14.78 - 4.12 3.59x -
quantile 14.45 - 4.36 3.31x -
function np (µs) bn (µs) rd (µs) np/rd bn/rd
mean 3.11 - 1.85 1.68x -
average 6.55 - 3.49 1.88x -
median 28.41 18.32 27.63 1.03x 0.66x
sum 1.92 - 1.89 1.02x -
min 1.04 - 1.29 0.81x -
max 1.02 - 1.26 0.82x -
minmax 2.08 - 1.60 1.29x -
var 8.39 - 3.99 2.10x -
std 8.83 - 4.09 2.16x -
percentile 51.55 - 45.04 1.14x -
quantile 50.34 - 45.17 1.11x -
function np (µs) bn (µs) rd (µs) np/rd bn/rd
mean 1143.50 - 1698.96 0.67x -
average 3310.12 - 3091.21 1.07x -
median 78067.21 61903.75 27209.46 2.87x 2.28x
sum 1154.08 - 1697.42 0.68x -
min 429.87 - 299.58 1.43x -
max 464.17 - 321.33 1.44x -
minmax 906.62 - 362.21 2.50x -
var 3538.71 - 3862.71 0.92x -
std 3581.17 - 3875.25 0.92x -
percentile 117098.29 - 43294.92 2.70x -
quantile 117619.17 - 43184.33 2.72x -

NaN-aware, float64

function np (µs) bn (µs) rd (µs) np/rd bn/rd
nanmean 4.27 0.07 0.14 30.61x 0.50x
nanaverage 3.10 - 0.30 10.19x -
nanmedian 6.58 0.11 0.24 27.51x 0.44x
nansum 1.75 0.07 0.19 9.39x 0.38x
nanmin 1.55 0.06 0.14 10.79x 0.40x
nanmax 1.58 0.06 0.15 10.84x 0.39x
nanminmax 3.18 0.11 0.16 19.58x 0.68x
nanvar 9.43 0.12 0.20 48.20x 0.60x
nanstd 9.86 0.16 0.26 37.95x 0.61x
nanpercentile 16.50 - 3.51 4.70x -
nanquantile 15.92 - 3.81 4.18x -
function np (µs) bn (µs) rd (µs) np/rd bn/rd
nanmean 4.27 0.16 0.16 26.41x 0.98x
nanaverage 3.15 - 0.32 9.75x -
nanmedian 6.81 0.21 0.35 19.40x 0.60x
nansum 1.74 0.15 0.20 8.83x 0.78x
nanmin 1.64 0.09 0.16 10.52x 0.57x
nanmax 1.63 0.09 0.16 10.53x 0.57x
nanminmax 3.29 0.17 0.19 17.52x 0.89x
nanvar 9.48 0.29 0.24 39.56x 1.20x
nanstd 9.95 0.33 0.31 32.06x 1.08x
nanpercentile 16.86 - 4.02 4.20x -
nanquantile 16.15 - 4.31 3.75x -
function np (µs) bn (µs) rd (µs) np/rd bn/rd
nanmean 12.44 12.32 3.16 3.94x 3.90x
nanaverage 16.73 - 3.05 5.48x -
nanmedian 30.57 20.31 30.88 0.99x 0.66x
nansum 7.54 11.14 3.15 2.39x 3.53x
nanmin 2.27 4.83 1.72 1.32x 2.81x
nanmax 2.25 4.94 1.74 1.30x 2.84x
nanminmax 4.62 9.47 2.27 2.03x 4.17x
nanvar 28.29 24.71 6.28 4.51x 3.94x
nanstd 28.76 24.53 6.36 4.52x 3.86x
nanpercentile 58.11 - 48.18 1.21x -
nanquantile 54.89 - 49.47 1.11x -
function np (µs) bn (µs) rd (µs) np/rd bn/rd
nanmean 6617.96 11152.88 3055.38 2.17x 3.65x
nanaverage 12381.00 - 2580.04 4.80x -
nanmedian 54945.29 61287.92 29037.04 1.89x 2.11x
nansum 4817.33 11168.96 3027.50 1.59x 3.69x
nanmin 900.83 4726.58 450.54 2.00x 10.49x
nanmax 991.75 4835.75 477.96 2.07x 10.12x
nanminmax 1854.54 9593.12 486.46 3.81x 19.72x
nanvar 16862.54 24540.00 6188.21 2.72x 3.97x
nanstd 17262.54 24611.38 6573.13 2.63x 3.74x
nanpercentile 117531.96 - 45452.63 2.59x -
nanquantile 118207.71 - 46424.12 2.55x -

NaN-aware, float32

function np (µs) bn (µs) rd (µs) np/rd bn/rd
nanmean 5.14 0.07 0.17 30.92x 0.43x
nanaverage 3.07 - 0.35 8.80x -
nanmedian 7.46 0.11 0.26 28.45x 0.42x
nansum 1.72 0.07 0.21 8.28x 0.34x
nanmin 1.63 0.06 0.16 9.89x 0.34x
nanmax 1.65 0.06 0.17 9.83x 0.34x
nanminmax 3.29 0.11 0.18 17.94x 0.61x
nanvar 10.62 0.12 0.22 48.63x 0.54x
nanstd 11.12 0.16 0.29 38.29x 0.55x
nanpercentile 17.06 - 3.58 4.77x -
nanquantile 16.55 - 3.86 4.29x -
function np (µs) bn (µs) rd (µs) np/rd bn/rd
nanmean 5.17 0.16 0.18 28.38x 0.88x
nanaverage 3.13 - 0.37 8.44x -
nanmedian 7.61 0.20 0.35 21.59x 0.58x
nansum 1.74 0.15 0.24 7.39x 0.64x
nanmin 1.65 0.09 0.17 9.52x 0.52x
nanmax 1.66 0.09 0.17 9.90x 0.53x
nanminmax 3.33 0.17 0.19 17.66x 0.89x
nanvar 10.58 0.28 0.26 40.56x 1.09x
nanstd 11.15 0.34 0.34 33.04x 1.00x
nanpercentile 17.37 - 4.08 4.26x -
nanquantile 16.90 - 4.39 3.85x -
function np (µs) bn (µs) rd (µs) np/rd bn/rd
nanmean 12.32 n/a 3.20 3.85x n/a
nanaverage 14.88 - 4.03 3.69x -
nanmedian 31.37 19.69 29.95 1.05x 0.66x
nansum 5.96 n/a 3.22 1.85x n/a
nanmin 1.90 4.80 0.95 2.00x 5.07x
nanmax 1.88 4.81 0.95 1.97x 5.03x
nanminmax 3.82 9.29 1.23 3.12x 7.57x
nanvar 26.69 n/a 6.21 4.30x n/a
nanstd 27.37 24.54 6.15 4.45x 3.99x
nanpercentile 58.30 - 47.59 1.22x -
nanquantile 56.41 - 47.82 1.18x -
function np (µs) bn (µs) rd (µs) np/rd bn/rd
nanmean 5355.67 n/a 3017.50 1.77x n/a
nanaverage 9895.13 - 3719.75 2.66x -
nanmedian 74527.29 59038.58 28337.37 2.63x 2.08x
nansum 3592.13 n/a 3067.50 1.17x n/a
nanmin 433.92 4771.42 232.46 1.87x 20.53x
nanmax 457.58 4974.58 274.50 1.67x 18.12x
nanminmax 910.58 9691.21 324.13 2.81x 29.90x
nanvar 14348.04 n/a 6113.63 2.35x n/a
nanstd 14223.42 n/a 6073.83 2.34x n/a
nanpercentile 113032.42 - 43584.29 2.59x -
nanquantile 113344.96 - 43631.63 2.60x -