Skip to main content
Logo BatchStats

PyPI Version Python Versions conda Version Documentation Status Unit tests

BatchStats

BatchStats computes statistics on data that arrives in batches, so you can stream or process large datasets without loading everything into memory. Its incremental algorithms expose a small NumPy-friendly API and support merging independently computed accumulators.

BatchStats requires Python 3.10 or newer.

Installation

pip install batchstats

Or with conda/mamba:

conda install -c conda-forge batchstats

Quick Start

import numpy as np
from batchstats import BatchMean, BatchVar

rng = np.random.default_rng(0)
data_stream = (rng.standard_normal((100, 10)) for _ in range(10))

batch_mean = BatchMean()
batch_var = BatchVar()

for batch in data_stream:
    batch_mean.update_batch(batch)
    batch_var.update_batch(batch)

mean = batch_mean()
variance = batch_var()

print(f"Mean shape: {mean.shape}")
print(f"Variance shape: {variance.shape}")

Available Statistics

  • BatchSum / BatchNanSum
  • BatchWeightedSum
  • BatchMean / BatchNanMean
  • BatchWeightedMean
  • BatchMin / BatchNanMin
  • BatchMax / BatchNanMax
  • BatchPeakToPeak / BatchNanPeakToPeak
  • BatchVar
  • BatchStd
  • BatchCov
  • BatchCorr
  • BatchTopK / BatchNanTopK (exact extreme ranks and linear tail quantiles)

BatchNanSum, BatchNanMean and the top-k accumulators can be saved and resumed with save() / load() using NPZ checkpoints. Use to_state() / from_state() to export and restore their state in memory.

from batchstats import BatchNanTopK, required_k

extremes = BatchNanTopK(required_k(0.998, 8784), axis=0)
for block in data_stream:  # (time, *spatial_shape), same spatial positions
    extremes.update_batch(block)
p998 = extremes.quantile(0.998)  # raises if retained capacity is insufficient
extremes.save("extremes.npz")

Top-k outputs have a leading rank axis and mask unavailable ranks while preserving the selected dtype. BatchTopK rejects NaNs; BatchNanTopK ignores them per cell. See the streaming and checkpoint guide.

Docs: https://batchstats.readthedocs.io

Optional xarray support

pip install "batchstats[xarray]"

Use the classes in batchstats.xarray with a DataArray or a Dataset:

from batchstats.xarray import BatchNanMean

mean = BatchNanMean(dim="time")
for batch in labelled_batches:
    mean.update_batch(batch)
result = mean()  # DataArray or Dataset, with the remaining dimensions/coordinates

All the statistics listed above have labelled counterparts. Reduce one or more named dimensions with dim="time" or dim=("time", "level"); dim=None reduces all dimensions. Dataset variables are accumulated independently. The NumPy API and its dependencies remain unchanged; importing batchstats does not import xarray. All labelled accumulators support checkpoints, including their retained coordinates and attributes:

mean.save("mean.npz")
mean = BatchNanMean.load("mean.npz")
mean.update_batch(next_batch)

Use keep_attrs=True to keep variable and Dataset attributes from the first batch. See the xarray guide for coordinate validation, weighted statistics, covariance, top-k and streaming limits.

Development

Install the development dependencies and run the local quality gates:

python -m pip install -e ".[dev,xarray]"
python -m ruff check .
python -m ruff format --check .
python -m pytest --cov=batchstats
python -m build
python -m twine check dist/*

Metadata

Release files for batchstats 0.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for batchstats 0.8
File Size Uploaded
batchstats-0.8.tar.gz 52.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for batchstats 0.8
File Interpreter ABI Platform
batchstats-0.8-py3-none-any.whl Python 3 none any Details

Total release size: 104.0 kB

Release files / batchstats-0.8.tar.gz

Download URL batchstats-0.8.tar.gz
Size 52.3 kB
Tags Source
SHA-256 checksum
How to use checksums
041ddcff6df4a2c7878d41aa58a5b8521cb9517928d705006d8c4eed98f5a0d7
BLAKE2b-256 checksum
How to use checksums
3bf781a6d2f6a35f2b49dcb41aa9b10bd89463e9479f16a7e0f8df0d9bec445b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / batchstats-0.8-py3-none-any.whl

Download URL batchstats-0.8-py3-none-any.whl
Size 51.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
12e150124a135c3c0fe69e0209950786c6100b432dc20433ca64dccf717858a1
BLAKE2b-256 checksum
How to use checksums
de166bab521cc6f32bc6d92bb9f0d1e74892bc0d1e8bf4c5f15fd90eb306c0c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release history Release notifications | RSS feed

This release

0.8 This release

2 release files

0.7

2 release files

0.6

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

1 release file

0.4.2

1 release file

0.4.1

1 release file

0.4

1 release file

0.3.3

1 release file

0.3.2

1 release file

0.3.1

1 release file

0.3

1 release file

0.2

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page