# reducers 1-D benchmark; bottleneck=yes # environment # - recorded UTC: 2026-09-08T12:22:36+00:00 # - python: 3.13.11 (CPython) # - reducers: 0.4.0 # - reducers build commit: eb27fc03cfc371cf6adf5e570068703aab1218e4 # - extension sha256: 1203f0a2a77ca6325bb47a541869d8432eb7686f5fc7ef6d5d48732e2fbcdb94 # - numpy: 2.4.6 # - bottleneck: 1.6.0 # - os: macOS-26.6-arm64-arm-64bit-Mach-O # - kernel: Darwin 25.6.0 Darwin Kernel Version 25.6.0: Sat Jul 11 15:27:27 PDT 2026; root:xnu-12377.161.13~4/RELEASE_ARM64_T6041 # - machine: arm64 # - command: benchmarks/benchmark_1d.py --repeats 15 --warmups 3 # - processor: arm # - reducers threads: 14 # - REDUCERS_AXIS_SCAN_PLAIN_GRAIN: 262144 # - REDUCERS_AXIS_SCAN_NAN_GRAIN: 262144 # - REDUCERS_AXIS_SCAN_VAR_GRAIN: 262144 # - REDUCERS_AXIS_WEIGHTED_GRAIN: 262144 # - REDUCERS_AXIS_ORDER_MEDIAN_GRAIN: 1024 # - REDUCERS_AXIS_ORDER_PERCENTILE_GRAIN: 1024 # - REDUCERS_MINMAX_1D_GRAIN: 65536 # - OMP_NUM_THREADS: 1 # - OPENBLAS_NUM_THREADS: 1 # - MKL_NUM_THREADS: 1 # - VECLIB_MAXIMUM_THREADS: 1 ## Plain finite-data | length | dtype | function | np (µs) | bn (µs) | rd (µs) | np/rd | bn/rd | |---:|---|---|---:|---:|---:|---:|---:| | 30 | float64 | `mean` | 1.18 | - | 0.13 | **9.39x** | - | | 30 | float64 | `average` | 2.74 | - | 0.28 | **9.63x** | - | | 30 | float64 | `median` | 4.54 | 0.12 | 0.25 | **18.18x** | 0.50x | | 30 | float64 | `sum` | 0.82 | - | 0.18 | **4.63x** | - | | 30 | float64 | `min` | 0.82 | - | 0.13 | **6.26x** | - | | 30 | float64 | `max` | 0.83 | - | 0.14 | **6.10x** | - | | 30 | float64 | `minmax` | 1.65 | - | 0.15 | **11.05x** | - | | 30 | float64 | `var` | 3.49 | - | 0.17 | **19.93x** | - | | 30 | float64 | `std` | 3.81 | - | 0.25 | **15.52x** | - | | 30 | float64 | `percentile` | 14.25 | - | 3.51 | **4.06x** | - | | 30 | float64 | `quantile` | 13.86 | - | 3.91 | **3.54x** | - | | 10^2 | float64 | `mean` | 1.16 | - | 0.14 | **8.53x** | - | | 10^2 | float64 | `average` | 2.76 | - | 0.31 | **8.98x** | - | | 10^2 | float64 | `median` | 4.92 | 0.19 | 0.52 | **9.42x** | 0.37x | | 10^2 | float64 | `sum` | 0.84 | - | 0.18 | **4.61x** | - | | 10^2 | float64 | `min` | 0.86 | - | 0.16 | **5.56x** | - | | 10^2 | float64 | `max` | 0.85 | - | 0.15 | **5.62x** | - | | 10^2 | float64 | `minmax` | 1.73 | - | 0.18 | **9.70x** | - | | 10^2 | float64 | `var` | 3.68 | - | 0.21 | **17.53x** | - | | 10^2 | float64 | `std` | 3.95 | - | 0.28 | **14.13x** | - | | 10^2 | float64 | `percentile` | 14.88 | - | 4.17 | **3.57x** | - | | 10^2 | float64 | `quantile` | 13.82 | - | 4.31 | **3.21x** | - | | 10^4 | float64 | `mean` | 2.44 | - | 1.53 | **1.60x** | - | | 10^4 | float64 | `average` | 7.79 | - | 2.31 | **3.37x** | - | | 10^4 | float64 | `median` | 28.88 | 18.49 | 28.63 | **1.01x** | 0.65x | | 10^4 | float64 | `sum` | 1.97 | - | 1.80 | **1.09x** | - | | 10^4 | float64 | `min` | 1.34 | - | 2.35 | 0.57x | - | | 10^4 | float64 | `max` | 1.39 | - | 2.19 | 0.63x | - | | 10^4 | float64 | `minmax` | 2.74 | - | 3.10 | 0.88x | - | | 10^4 | float64 | `var` | 9.38 | - | 3.76 | **2.49x** | - | | 10^4 | float64 | `std` | 9.61 | - | 3.89 | **2.47x** | - | | 10^4 | float64 | `percentile` | 51.95 | - | 47.41 | **1.10x** | - | | 10^4 | float64 | `quantile` | 50.17 | - | 47.38 | **1.06x** | - | | 10^7 | float64 | `mean` | 1198.33 | - | 1353.00 | 0.89x | - | | 10^7 | float64 | `average` | 4569.13 | - | 1872.87 | **2.44x** | - | | 10^7 | float64 | `median` | 70134.54 | 67513.58 | 28021.33 | **2.50x** | **2.41x** | | 10^7 | float64 | `sum` | 1229.21 | - | 1368.46 | 0.90x | - | | 10^7 | float64 | `min` | 897.17 | - | 508.63 | **1.76x** | - | | 10^7 | float64 | `max` | 939.21 | - | 504.37 | **1.86x** | - | | 10^7 | float64 | `minmax` | 1864.04 | - | 551.83 | **3.38x** | - | | 10^7 | float64 | `var` | 5038.17 | - | 3585.33 | **1.41x** | - | | 10^7 | float64 | `std` | 5194.33 | - | 3643.00 | **1.43x** | - | | 10^7 | float64 | `percentile` | 114479.79 | - | 45393.58 | **2.52x** | - | | 10^7 | float64 | `quantile` | 114218.25 | - | 45280.83 | **2.52x** | - | | 30 | float32 | `mean` | 1.90 | - | 0.14 | **13.32x** | - | | 30 | float32 | `average` | 2.68 | - | 0.33 | **8.11x** | - | | 30 | float32 | `median` | 5.46 | 0.12 | 0.27 | **20.45x** | 0.44x | | 30 | float32 | `sum` | 0.82 | - | 0.19 | **4.20x** | - | | 30 | float32 | `min` | 0.80 | - | 0.15 | **5.44x** | - | | 30 | float32 | `max` | 0.81 | - | 0.15 | **5.47x** | - | | 30 | float32 | `minmax` | 1.65 | - | 0.16 | **10.17x** | - | | 30 | float32 | `var` | 4.51 | - | 0.20 | **23.02x** | - | | 30 | float32 | `std` | 4.96 | - | 0.26 | **18.96x** | - | | 30 | float32 | `percentile` | 14.45 | - | 3.54 | **4.08x** | - | | 30 | float32 | `quantile` | 14.00 | - | 3.89 | **3.60x** | - | | 10^2 | float32 | `mean` | 2.00 | - | 0.16 | **12.81x** | - | | 10^2 | float32 | `average` | 2.72 | - | 0.36 | **7.66x** | - | | 10^2 | float32 | `median` | 5.59 | 0.23 | 0.51 | **11.04x** | 0.45x | | 10^2 | float32 | `sum` | 0.82 | - | 0.20 | **4.15x** | - | | 10^2 | float32 | `min` | 0.83 | - | 0.17 | **5.03x** | - | | 10^2 | float32 | `max` | 0.85 | - | 0.15 | **5.62x** | - | | 10^2 | float32 | `minmax` | 1.66 | - | 0.18 | **9.48x** | - | | 10^2 | float32 | `var` | 4.59 | - | 0.24 | **19.29x** | - | | 10^2 | float32 | `std` | 4.99 | - | 0.31 | **16.09x** | - | | 10^2 | float32 | `percentile` | 14.78 | - | 4.12 | **3.59x** | - | | 10^2 | float32 | `quantile` | 14.45 | - | 4.36 | **3.31x** | - | | 10^4 | float32 | `mean` | 3.11 | - | 1.85 | **1.68x** | - | | 10^4 | float32 | `average` | 6.55 | - | 3.49 | **1.88x** | - | | 10^4 | float32 | `median` | 28.41 | 18.32 | 27.63 | **1.03x** | 0.66x | | 10^4 | float32 | `sum` | 1.92 | - | 1.89 | **1.02x** | - | | 10^4 | float32 | `min` | 1.04 | - | 1.29 | 0.81x | - | | 10^4 | float32 | `max` | 1.02 | - | 1.26 | 0.82x | - | | 10^4 | float32 | `minmax` | 2.08 | - | 1.60 | **1.29x** | - | | 10^4 | float32 | `var` | 8.39 | - | 3.99 | **2.10x** | - | | 10^4 | float32 | `std` | 8.83 | - | 4.09 | **2.16x** | - | | 10^4 | float32 | `percentile` | 51.55 | - | 45.04 | **1.14x** | - | | 10^4 | float32 | `quantile` | 50.34 | - | 45.17 | **1.11x** | - | | 10^7 | float32 | `mean` | 1143.50 | - | 1698.96 | 0.67x | - | | 10^7 | float32 | `average` | 3310.12 | - | 3091.21 | **1.07x** | - | | 10^7 | float32 | `median` | 78067.21 | 61903.75 | 27209.46 | **2.87x** | **2.28x** | | 10^7 | float32 | `sum` | 1154.08 | - | 1697.42 | 0.68x | - | | 10^7 | float32 | `min` | 429.87 | - | 299.58 | **1.43x** | - | | 10^7 | float32 | `max` | 464.17 | - | 321.33 | **1.44x** | - | | 10^7 | float32 | `minmax` | 906.62 | - | 362.21 | **2.50x** | - | | 10^7 | float32 | `var` | 3538.71 | - | 3862.71 | 0.92x | - | | 10^7 | float32 | `std` | 3581.17 | - | 3875.25 | 0.92x | - | | 10^7 | float32 | `percentile` | 117098.29 | - | 43294.92 | **2.70x** | - | | 10^7 | float32 | `quantile` | 117619.17 | - | 43184.33 | **2.72x** | - | ## NaN-aware | length | dtype | function | np (µs) | bn (µs) | rd (µs) | np/rd | bn/rd | |---:|---|---|---:|---:|---:|---:|---:| | 30 | float64 | `nanmean` | 4.27 | 0.07 | 0.14 | **30.61x** | 0.50x | | 30 | float64 | `nanaverage` | 3.10 | - | 0.30 | **10.19x** | - | | 30 | float64 | `nanmedian` | 6.58 | 0.11 | 0.24 | **27.51x** | 0.44x | | 30 | float64 | `nansum` | 1.75 | 0.07 | 0.19 | **9.39x** | 0.38x | | 30 | float64 | `nanmin` | 1.55 | 0.06 | 0.14 | **10.79x** | 0.40x | | 30 | float64 | `nanmax` | 1.58 | 0.06 | 0.15 | **10.84x** | 0.39x | | 30 | float64 | `nanminmax` | 3.18 | 0.11 | 0.16 | **19.58x** | 0.68x | | 30 | float64 | `nanvar` | 9.43 | 0.12 | 0.20 | **48.20x** | 0.60x | | 30 | float64 | `nanstd` | 9.86 | 0.16 | 0.26 | **37.95x** | 0.61x | | 30 | float64 | `nanpercentile` | 16.50 | - | 3.51 | **4.70x** | - | | 30 | float64 | `nanquantile` | 15.92 | - | 3.81 | **4.18x** | - | | 10^2 | float64 | `nanmean` | 4.27 | 0.16 | 0.16 | **26.41x** | **0.98x** | | 10^2 | float64 | `nanaverage` | 3.15 | - | 0.32 | **9.75x** | - | | 10^2 | float64 | `nanmedian` | 6.81 | 0.21 | 0.35 | **19.40x** | 0.60x | | 10^2 | float64 | `nansum` | 1.74 | 0.15 | 0.20 | **8.83x** | 0.78x | | 10^2 | float64 | `nanmin` | 1.64 | 0.09 | 0.16 | **10.52x** | 0.57x | | 10^2 | float64 | `nanmax` | 1.63 | 0.09 | 0.16 | **10.53x** | 0.57x | | 10^2 | float64 | `nanminmax` | 3.29 | 0.17 | 0.19 | **17.52x** | 0.89x | | 10^2 | float64 | `nanvar` | 9.48 | 0.29 | 0.24 | **39.56x** | **1.20x** | | 10^2 | float64 | `nanstd` | 9.95 | 0.33 | 0.31 | **32.06x** | **1.08x** | | 10^2 | float64 | `nanpercentile` | 16.86 | - | 4.02 | **4.20x** | - | | 10^2 | float64 | `nanquantile` | 16.15 | - | 4.31 | **3.75x** | - | | 10^4 | float64 | `nanmean` | 12.44 | 12.32 | 3.16 | **3.94x** | **3.90x** | | 10^4 | float64 | `nanaverage` | 16.73 | - | 3.05 | **5.48x** | - | | 10^4 | float64 | `nanmedian` | 30.57 | 20.31 | 30.88 | **0.99x** | 0.66x | | 10^4 | float64 | `nansum` | 7.54 | 11.14 | 3.15 | **2.39x** | **3.53x** | | 10^4 | float64 | `nanmin` | 2.27 | 4.83 | 1.72 | **1.32x** | **2.81x** | | 10^4 | float64 | `nanmax` | 2.25 | 4.94 | 1.74 | **1.30x** | **2.84x** | | 10^4 | float64 | `nanminmax` | 4.62 | 9.47 | 2.27 | **2.03x** | **4.17x** | | 10^4 | float64 | `nanvar` | 28.29 | 24.71 | 6.28 | **4.51x** | **3.94x** | | 10^4 | float64 | `nanstd` | 28.76 | 24.53 | 6.36 | **4.52x** | **3.86x** | | 10^4 | float64 | `nanpercentile` | 58.11 | - | 48.18 | **1.21x** | - | | 10^4 | float64 | `nanquantile` | 54.89 | - | 49.47 | **1.11x** | - | | 10^7 | float64 | `nanmean` | 6617.96 | 11152.88 | 3055.38 | **2.17x** | **3.65x** | | 10^7 | float64 | `nanaverage` | 12381.00 | - | 2580.04 | **4.80x** | - | | 10^7 | float64 | `nanmedian` | 54945.29 | 61287.92 | 29037.04 | **1.89x** | **2.11x** | | 10^7 | float64 | `nansum` | 4817.33 | 11168.96 | 3027.50 | **1.59x** | **3.69x** | | 10^7 | float64 | `nanmin` | 900.83 | 4726.58 | 450.54 | **2.00x** | **10.49x** | | 10^7 | float64 | `nanmax` | 991.75 | 4835.75 | 477.96 | **2.07x** | **10.12x** | | 10^7 | float64 | `nanminmax` | 1854.54 | 9593.12 | 486.46 | **3.81x** | **19.72x** | | 10^7 | float64 | `nanvar` | 16862.54 | 24540.00 | 6188.21 | **2.72x** | **3.97x** | | 10^7 | float64 | `nanstd` | 17262.54 | 24611.38 | 6573.13 | **2.63x** | **3.74x** | | 10^7 | float64 | `nanpercentile` | 117531.96 | - | 45452.63 | **2.59x** | - | | 10^7 | float64 | `nanquantile` | 118207.71 | - | 46424.12 | **2.55x** | - | | 30 | float32 | `nanmean` | 5.14 | 0.07 | 0.17 | **30.92x** | 0.43x | | 30 | float32 | `nanaverage` | 3.07 | - | 0.35 | **8.80x** | - | | 30 | float32 | `nanmedian` | 7.46 | 0.11 | 0.26 | **28.45x** | 0.42x | | 30 | float32 | `nansum` | 1.72 | 0.07 | 0.21 | **8.28x** | 0.34x | | 30 | float32 | `nanmin` | 1.63 | 0.06 | 0.16 | **9.89x** | 0.34x | | 30 | float32 | `nanmax` | 1.65 | 0.06 | 0.17 | **9.83x** | 0.34x | | 30 | float32 | `nanminmax` | 3.29 | 0.11 | 0.18 | **17.94x** | 0.61x | | 30 | float32 | `nanvar` | 10.62 | 0.12 | 0.22 | **48.63x** | 0.54x | | 30 | float32 | `nanstd` | 11.12 | 0.16 | 0.29 | **38.29x** | 0.55x | | 30 | float32 | `nanpercentile` | 17.06 | - | 3.58 | **4.77x** | - | | 30 | float32 | `nanquantile` | 16.55 | - | 3.86 | **4.29x** | - | | 10^2 | float32 | `nanmean` | 5.17 | 0.16 | 0.18 | **28.38x** | 0.88x | | 10^2 | float32 | `nanaverage` | 3.13 | - | 0.37 | **8.44x** | - | | 10^2 | float32 | `nanmedian` | 7.61 | 0.20 | 0.35 | **21.59x** | 0.58x | | 10^2 | float32 | `nansum` | 1.74 | 0.15 | 0.24 | **7.39x** | 0.64x | | 10^2 | float32 | `nanmin` | 1.65 | 0.09 | 0.17 | **9.52x** | 0.52x | | 10^2 | float32 | `nanmax` | 1.66 | 0.09 | 0.17 | **9.90x** | 0.53x | | 10^2 | float32 | `nanminmax` | 3.33 | 0.17 | 0.19 | **17.66x** | 0.89x | | 10^2 | float32 | `nanvar` | 10.58 | 0.28 | 0.26 | **40.56x** | **1.09x** | | 10^2 | float32 | `nanstd` | 11.15 | 0.34 | 0.34 | **33.04x** | **1.00x** | | 10^2 | float32 | `nanpercentile` | 17.37 | - | 4.08 | **4.26x** | - | | 10^2 | float32 | `nanquantile` | 16.90 | - | 4.39 | **3.85x** | - | | 10^4 | float32 | `nanmean` | 12.32 | n/a | 3.20 | **3.85x** | n/a | | 10^4 | float32 | `nanaverage` | 14.88 | - | 4.03 | **3.69x** | - | | 10^4 | float32 | `nanmedian` | 31.37 | 19.69 | 29.95 | **1.05x** | 0.66x | | 10^4 | float32 | `nansum` | 5.96 | n/a | 3.22 | **1.85x** | n/a | | 10^4 | float32 | `nanmin` | 1.90 | 4.80 | 0.95 | **2.00x** | **5.07x** | | 10^4 | float32 | `nanmax` | 1.88 | 4.81 | 0.95 | **1.97x** | **5.03x** | | 10^4 | float32 | `nanminmax` | 3.82 | 9.29 | 1.23 | **3.12x** | **7.57x** | | 10^4 | float32 | `nanvar` | 26.69 | n/a | 6.21 | **4.30x** | n/a | | 10^4 | float32 | `nanstd` | 27.37 | 24.54 | 6.15 | **4.45x** | **3.99x** | | 10^4 | float32 | `nanpercentile` | 58.30 | - | 47.59 | **1.22x** | - | | 10^4 | float32 | `nanquantile` | 56.41 | - | 47.82 | **1.18x** | - | | 10^7 | float32 | `nanmean` | 5355.67 | n/a | 3017.50 | **1.77x** | n/a | | 10^7 | float32 | `nanaverage` | 9895.13 | - | 3719.75 | **2.66x** | - | | 10^7 | float32 | `nanmedian` | 74527.29 | 59038.58 | 28337.37 | **2.63x** | **2.08x** | | 10^7 | float32 | `nansum` | 3592.13 | n/a | 3067.50 | **1.17x** | n/a | | 10^7 | float32 | `nanmin` | 433.92 | 4771.42 | 232.46 | **1.87x** | **20.53x** | | 10^7 | float32 | `nanmax` | 457.58 | 4974.58 | 274.50 | **1.67x** | **18.12x** | | 10^7 | float32 | `nanminmax` | 910.58 | 9691.21 | 324.13 | **2.81x** | **29.90x** | | 10^7 | float32 | `nanvar` | 14348.04 | n/a | 6113.63 | **2.35x** | n/a | | 10^7 | float32 | `nanstd` | 14223.42 | n/a | 6073.83 | **2.34x** | n/a | | 10^7 | float32 | `nanpercentile` | 113032.42 | - | 43584.29 | **2.59x** | - | | 10^7 | float32 | `nanquantile` | 113344.96 | - | 43631.63 | **2.60x** | - |