tabmat
Efficient matrix representations for working with tabular data.
What it is and what it does
Tabmat provides specialized matrix classes—DenseMatrix, SparseMatrix, CategoricalMatrix, SplitMatrix, and StandardizedMatrix—designed to efficiently represent and compute on tabular data that combines dense columns, sparse columns, and one-hot-encoded categorical features. It targets statistical and econometric workflows where operations like sandwich products, matrix-vector products, and standardization are frequent bottlenecks. The library depends on formulaic, narwhals, numpy, and scipy, and aims to be a drop-in replacement for numpy.ndarray and scipy.sparse.csc_matrix where possible.
The core design trades API breadth for speed and memory efficiency. Each matrix type supports a unified set of operations (matrix-vector products, sandwich products, getcol) with additional methods on individual subclasses. CategoricalMatrix exploits the structure of one-hot encoding to avoid storing redundant data. SplitMatrix combines dense, sparse, and categorical parts in a single object to accelerate multiplications across heterogeneous data.
Use it for:
- Estimating generalized linear models where sandwich products appear in Hessian computation
- Weighted least squares with mixed-type predictors where sandwich products are central to normal equations
- L1-penalized coordinate descent on subsets of columns requiring fast matrix-vector products on active sets
- Standardizing predictors to mean zero and unit variance while preserving sparsity structure
- Building statistical algorithms on tabular data with many categorical features encoded as one-hot indicators
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Provides efficient matrix classes for tabular data that mix dense, sparse, and categorical columns, optimized for statistical algorithms.
Yes, if you are building statistical or econometric algorithms on mixed-type tabular data and need performance beyond generic numpy/scipy. The library is actively maintained, has no known vulnerabilities, and provides a unified API across heterogeneous matrix types. License treatment is unclear, so verify licensing before use in proprietary code.
Install
tabmat on PyPI
pip
pip install tabmatuv
uv add tabmatpoetry
poetry add tabmatInstalling tabmat
Before you install
Medium install friction due to compiled wheels across Python 3.10–3.13 and multiple platforms. Active maintenance with recent commits and no known vulnerabilities.
Quickstart
pip install tabmat
import tabmat as tm
import numpy as np
dense_array = np.random.normal(size=(100, 1))
matrix = tm.from_pandas(dense_array)
Requires Python 3.10 or later; compiled wheels are provided for common platforms but source builds may require a C compiler.
Verify before relying
- Whether standardization methods preserve sparsity structure as claimed in the description
- Performance benchmarks comparing sandwich products against direct numpy/scipy approaches
- Compatibility with downstream packages expecting numpy.ndarray or scipy.sparse interfaces
Package facts
| License | not declared (unclear) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | medium — platform-specific wheel |
| Runtime dependencies | 4 — formulaic, narwhals, numpy, scipy |
| Maintenance | actively maintained — 191 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 325,279/month — #7,587 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: tabmat-4.2.1-cp310-cp310-macosx_12_0_arm64.whl; tabmat-4.2.1-cp310-cp310-macosx_12_0_x86_64.whl; tabmat-4.2.1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl; tabmat-4.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl; tabmat-4.2.1-cp310-cp310-win_amd64.whl; tabmat-4.2.1-cp311-cp311-macosx_12_0_arm64.whl; tabmat-4.2.1-cp311-cp311-macosx_12_0_x86_64.whl; tabmat-4.2.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl; tabmat-4.2.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl; tabmat-4.2.1-cp311-cp311-win_amd64.whl; tabmat-4.2.1-cp312-cp312-macosx_12_0_arm64.whl; tabmat-4.2.1-cp312-cp312-macosx_12_0_x86_64.whl; tabmat-4.2.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl; tabmat-4.2.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl; tabmat-4.2.1-cp312-cp312-win_amd64.whl; tabmat-4.2.1-cp313-cp313-macosx_12_0_arm64.whl; tabmat-4.2.1-cp313-cp313-macosx_12_0_x86_64.whl; tabmat-4.2.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl; tabmat-4.2.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl; tabmat-4.2.1-cp313-cp313-win_amd64.whl
Tags
More Mathematics packages
NetworkX provides data structures and…
permissive · top 1,000 on PyPI
kiwisolverkiwisolver is a Python binding to a fast C++…
permissive · top 1,000 on PyPI
sympySymPy is a Python library for symbolic…
permissive · top 1,000 on PyPI
contourpyContourPy calculates contours of 2D…
permissive · top 1,000 on PyPI
torchPyTorch provides GPU-accelerated tensor…
permissive · top 1,000 on PyPI
onnxruntimeonnxruntime loads and executes Open Neural…
permissive · top 1,000 on PyPI
formulaicFormulaic converts tabular data into model…
permissive · top 5,000 on PyPI
spglmFits Gaussian, Poisson, QuasiPoisson, and…
permissive · top 15,000 on PyPI
sparse-dot-topnPerforms fast sparse matrix multiplication with…
permissive · top 15,000 on PyPI
formulaic-contrastsBuilds arbitrary contrasts for statistical…
permissive · top 15,000 on PyPI
anndataanndata handles annotated data matrices in…
permissive · top 5,000 on PyPI
lapSolves the linear assignment problem using the…
permissive · top 5,000 on PyPI
linear-operatorLinearOperator abstracts structured matrix…
permissive · top 5,000 on PyPI
fast-array-utilsConverts and computes statistics across sparse,…
copyleft · top 15,000 on PyPI
category-encodersTransforms categorical variables into numeric…
permissive · top 5,000 on PyPI
phikPhi_K computes a correlation coefficient that…
permissive · top 5,000 on PyPI