Skip to main content

Stack Axis 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_axis.py --repeats 15 --warmups 3

Times are median milliseconds per call over 15 samples after 3 warmups; the lowest and highest samples are discarded. 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 its default validation. var uses ddof=0, std uses ddof=1. Averages use one weight per reduced-axis position, uniform on [0.5, 1.5). NumPy nanaverage uses a masked array prepared before timing. Percentile requests [16, 50, 84]; quantile requests [0.16, 0.50, 0.84]. NaN-aware inputs have a NaN every 97 elements. Axis nanpercentile/nanquantile are outside this matrix; no speed claim is made for them. Cheap calls can be sensitive to scheduling noise.

Plain, float64

function np (ms) bn (ms) rd (ms) np/rd bn/rd
mean 0.16 - 0.10 1.57x -
average 0.28 - 0.38 0.74x -
median 8.68 7.77 0.66 13.24x 11.84x
var 0.61 - 0.17 3.53x -
std 0.61 - 0.17 3.66x -
min 0.17 - 0.11 1.53x -
max 0.17 - 0.13 1.30x -
minmax 0.34 - 0.14 2.51x -
sum 0.15 - 0.10 1.56x -
percentile 14.30 - 1.70 8.43x -
quantile 14.21 - 1.64 8.65x -
function np (ms) bn (ms) rd (ms) np/rd bn/rd
mean 0.18 - 0.07 2.49x -
average 0.48 - 0.15 3.24x -
median 8.36 7.43 0.62 13.49x 11.99x
var 0.69 - 0.19 3.55x -
std 0.70 - 0.20 3.55x -
min 0.12 - 0.15 0.81x -
max 0.12 - 0.15 0.80x -
minmax 0.26 - 0.19 1.36x -
sum 0.17 - 0.07 2.41x -
percentile 13.65 - 1.55 8.79x -
quantile 13.83 - 1.57 8.80x -
function np (ms) bn (ms) rd (ms) np/rd bn/rd
mean 0.02 - 0.02 0.91x -
average 0.04 - 0.06 0.78x -
median 0.84 0.64 0.23 3.69x 2.82x
var 0.07 - 0.07 0.99x -
std 0.08 - 0.08 1.00x -
min 0.02 - 0.03 0.77x -
max 0.02 - 0.03 0.77x -
minmax 0.04 - 0.04 1.00x -
sum 0.02 - 0.03 0.84x -
percentile 1.26 - 0.61 2.05x -
quantile 1.23 - 0.63 1.97x -
function np (ms) bn (ms) rd (ms) np/rd bn/rd
mean 0.06 - 0.06 0.99x -
average 0.10 - 0.14 0.77x -
median 2.99 2.42 0.31 9.50x 7.69x
var 0.19 - 0.17 1.11x -
std 0.20 - 0.17 1.13x -
min 0.05 - 0.06 0.84x -
max 0.05 - 0.06 0.84x -
minmax 0.11 - 0.10 1.08x -
sum 0.05 - 0.06 0.82x -
percentile 4.99 - 0.83 6.03x -
quantile 4.96 - 0.83 5.95x -
function np (ms) bn (ms) rd (ms) np/rd bn/rd
mean 0.52 - 0.24 2.20x -
average 0.89 - 0.90 0.99x -
median 29.77 23.44 3.29 9.06x 7.13x
var 1.97 - 0.44 4.44x -
std 1.97 - 0.45 4.37x -
min 0.51 - 0.21 2.42x -
max 0.49 - 0.24 2.06x -
minmax 0.99 - 0.34 2.91x -
sum 0.54 - 0.23 2.38x -
percentile 35.83 - 10.26 3.49x -
quantile 35.90 - 10.12 3.55x -

Plain, float32

function np (ms) bn (ms) rd (ms) np/rd bn/rd
mean 0.07 - 0.08 0.87x -
average 0.13 - 0.34 0.39x -
median 8.79 7.88 0.67 13.20x 11.82x
var 0.25 - 0.15 1.66x -
std 0.26 - 0.15 1.74x -
min 0.07 - 0.09 0.73x -
max 0.06 - 0.09 0.71x -
minmax 0.13 - 0.11 1.21x -
sum 0.06 - 0.10 0.60x -
percentile 14.54 - 1.77 8.21x -
quantile 15.01 - 1.72 8.73x -
function np (ms) bn (ms) rd (ms) np/rd bn/rd
mean 0.17 - 0.10 1.66x -
average 0.31 - 0.20 1.60x -
median 8.25 7.67 0.65 12.76x 11.86x
var 0.52 - 0.23 2.23x -
std 0.52 - 0.25 2.09x -
min 0.10 - 0.10 1.01x -
max 0.11 - 0.10 1.04x -
minmax 0.20 - 0.12 1.67x -
sum 0.17 - 0.11 1.54x -
percentile 13.97 - 1.60 8.75x -
quantile 13.77 - 1.64 8.37x -
function np (ms) bn (ms) rd (ms) np/rd bn/rd
mean 0.01 - 0.02 0.79x -
average 0.02 - 0.05 0.46x -
median 0.89 0.72 0.19 4.74x 3.79x
var 0.04 - 0.06 0.67x -
std 0.04 - 0.07 0.65x -
min 0.01 - 0.01 0.64x -
max 0.01 - 0.01 0.63x -
minmax 0.02 - 0.02 0.89x -
sum 0.01 - 0.02 0.57x -
percentile 1.25 - 0.59 2.12x -
quantile 1.25 - 0.60 2.06x -
function np (ms) bn (ms) rd (ms) np/rd bn/rd
mean 0.03 - 0.04 0.72x -
average 0.05 - 0.13 0.40x -
median 3.02 2.59 0.28 10.94x 9.41x
var 0.09 - 0.15 0.60x -
std 0.09 - 0.18 0.53x -
min 0.02 - 0.03 0.80x -
max 0.02 - 0.03 0.65x -
minmax 0.04 - 0.05 0.92x -
sum 0.02 - 0.04 0.60x -
percentile 5.15 - 0.74 6.93x -
quantile 5.08 - 0.74 6.84x -
function np (ms) bn (ms) rd (ms) np/rd bn/rd
mean 0.37 - 0.20 1.85x -
average 0.44 - 0.87 0.50x -
median 29.52 23.52 2.30 12.85x 10.24x
var 1.17 - 0.37 3.12x -
std 1.15 - 0.39 2.92x -
min 0.25 - 0.15 1.65x -
max 0.25 - 0.14 1.70x -
minmax 0.48 - 0.20 2.37x -
sum 0.27 - 0.17 1.62x -
percentile 36.05 - 13.33 2.70x -
quantile 35.99 - 13.45 2.68x -

NaN-aware, float64

function np (ms) bn (ms) rd (ms) np/rd bn/rd
nanmean 0.94 0.73 0.17 5.37x 4.18x
nanaverage 3.70 - 0.45 8.31x -
nanmedian 28.10 7.50 0.47 59.39x 15.85x
nanvar 2.10 1.66 0.27 7.74x 6.12x
nanstd 2.10 1.69 0.28 7.54x 6.05x
nanmin 0.17 0.65 0.09 1.88x 7.12x
nanmax 0.17 0.66 0.09 1.84x 6.99x
nanminmax 0.35 1.33 0.13 2.61x 9.98x
nansum 0.49 0.64 0.19 2.63x 3.40x
function np (ms) bn (ms) rd (ms) np/rd bn/rd
nanmean 0.71 0.66 0.15 4.70x 4.39x
nanaverage 3.95 - 0.16 25.07x -
nanmedian 25.48 8.04 0.96 26.48x 8.35x
nanvar 1.96 1.62 0.32 6.12x 5.06x
nanstd 1.95 1.65 0.32 6.02x 5.08x
nanmin 0.12 0.64 0.12 1.06x 5.50x
nanmax 0.13 0.64 0.12 1.05x 5.27x
nanminmax 0.25 1.32 0.17 1.50x 7.87x
nansum 0.50 0.63 0.15 3.38x 4.26x
function np (ms) bn (ms) rd (ms) np/rd bn/rd
nanmean 0.12 0.03 0.05 2.11x 0.62x
nanaverage 0.49 - 0.08 6.30x -
nanmedian 1.80 0.71 0.20 8.99x 3.55x
nanvar 0.25 0.09 0.10 2.46x 0.92x
nanstd 0.26 0.10 0.10 2.50x 0.98x
nanmin 0.02 0.04 0.02 1.05x 2.08x
nanmax 0.02 0.04 0.02 1.04x 2.07x
nanminmax 0.04 0.08 0.03 1.24x 2.45x
nansum 0.06 0.04 0.05 1.09x 0.72x
function np (ms) bn (ms) rd (ms) np/rd bn/rd
nanmean 0.29 0.14 0.14 2.14x 0.99x
nanaverage 1.18 - 0.20 5.88x -
nanmedian 6.48 2.56 0.31 20.56x 8.14x
nanvar 0.66 0.37 0.25 2.62x 1.45x
nanstd 0.67 0.38 0.25 2.63x 1.48x
nanmin 0.06 0.13 0.05 1.03x 2.43x
nanmax 0.06 0.13 0.05 1.02x 2.43x
nanminmax 0.11 0.26 0.09 1.22x 2.91x
nansum 0.16 0.13 0.13 1.16x 0.98x
function np (ms) bn (ms) rd (ms) np/rd bn/rd
nanmean 2.92 1.45 0.39 7.49x 3.72x
nanaverage 11.75 - 1.09 10.77x -
nanmedian 57.99 24.46 2.93 19.78x 8.34x
nanvar 6.45 5.43 0.59 10.96x 9.23x
nanstd 6.78 5.13 0.64 10.61x 8.03x
nanmin 0.51 1.37 0.18 2.78x 7.52x
nanmax 0.52 1.39 0.20 2.55x 6.78x
nanminmax 0.98 2.76 0.67 1.47x 4.14x
nansum 1.53 1.34 0.38 4.09x 3.57x

NaN-aware, float32

function np (ms) bn (ms) rd (ms) np/rd bn/rd
nanmean 0.74 0.69 0.19 3.86x 3.63x
nanaverage 3.11 - 0.48 6.47x -
nanmedian 26.48 7.41 0.47 56.54x 15.81x
nanvar 1.61 1.62 0.30 5.38x 5.39x
nanstd 1.63 1.64 0.30 5.38x 5.39x
nanmin 0.06 0.63 0.07 0.93x 9.08x
nanmax 0.07 0.61 0.07 0.92x 8.43x
nanminmax 0.13 1.26 0.09 1.48x 14.05x
nansum 0.30 0.63 0.19 1.60x 3.32x
function np (ms) bn (ms) rd (ms) np/rd bn/rd
nanmean 0.65 0.66 0.16 4.06x 4.14x
nanaverage 3.46 - 0.22 15.80x -
nanmedian 25.28 7.47 0.48 52.40x 15.49x
nanvar 1.65 1.61 0.26 6.26x 6.11x
nanstd 1.65 1.63 0.28 5.86x 5.78x
nanmin 0.10 0.66 0.09 1.15x 7.37x
nanmax 0.10 0.61 0.09 1.12x 6.63x
nanminmax 0.21 1.26 0.10 1.98x 12.11x
nansum 0.41 0.66 0.15 2.64x 4.27x
function np (ms) bn (ms) rd (ms) np/rd bn/rd
nanmean 0.10 0.04 0.06 1.66x 0.69x
nanaverage 0.43 - 0.08 5.63x -
nanmedian 1.77 0.77 0.15 11.84x 5.13x
nanvar 0.21 0.09 0.10 1.99x 0.91x
nanstd 0.21 0.10 0.11 1.95x 0.92x
nanmin 0.01 0.04 0.01 1.18x 4.99x
nanmax 0.01 0.04 0.01 1.17x 4.98x
nanminmax 0.02 0.08 0.02 1.29x 5.48x
nansum 0.04 0.04 0.06 0.67x 0.69x
function np (ms) bn (ms) rd (ms) np/rd bn/rd
nanmean 0.24 0.13 0.15 1.63x 0.88x
nanaverage 1.06 - 0.20 5.29x -
nanmedian 6.43 2.55 0.32 19.96x 7.92x
nanvar 0.52 0.36 0.27 1.94x 1.33x
nanstd 0.52 0.35 0.27 1.92x 1.27x
nanmin 0.02 0.13 0.02 1.09x 6.18x
nanmax 0.02 0.13 0.02 1.09x 6.21x
nanminmax 0.05 0.26 0.04 1.20x 6.87x
nansum 0.10 0.13 0.15 0.67x 0.88x
function np (ms) bn (ms) rd (ms) np/rd bn/rd
nanmean 2.38 1.42 0.38 6.26x 3.73x
nanaverage 10.28 - 1.08 9.48x -
nanmedian 52.74 24.55 3.00 17.61x 8.19x
nanvar 5.13 5.38 0.60 8.61x 9.02x
nanstd 5.26 5.47 0.60 8.69x 9.05x
nanmin 0.27 1.38 0.12 2.34x 11.79x
nanmax 0.27 1.38 0.11 2.34x 12.01x
nanminmax 0.52 2.75 0.19 2.73x 14.39x
nansum 0.95 1.34 0.41 2.34x 3.30x