Skip to main content

McrNmf

McrNmf is a Python package for Multivariate Curve Resolution (MCR) using a range of Nonnegative Matrix Factorization (NMF) algorithms. MCR is widely used in chemometrics, for instance, to decompose mixture spectra into their pure component spectra and associated concentration profiles.

Key Features

  • Multiple solvers – unified interface for three NMF variants: classic Alternating Least Squares (FroALS), Fast Projected Gradient (FroFPGM), and Minimum-Volume formulation (MinVol).
  • Built-in constraints – supports closure, normalization, equality, and per-component unimodality constraints.
  • Robust initialisation – includes Successive Nonnegative Projection (SNPA) algorithm for generating reliable starting estimates of spectra and concentrations
  • Lightweight implementation – written almost entirely in NumPy, with Numba used only to speed up unimodal regression.

For more details, see the documentation.


Installation

With pip:

pip install mcrnmf

Note for macOS Apple Silicon (M4) users: When running the McrNmf package installed via pip, you may encounter runtime numerical warnings (e.g., divide/overflow). To avoid these, please install via conda-forge.

With conda:

conda install -c conda-forge mcrnmf

mcrnmf requires:

  • Python ≥ 3.11.9, < 3.14
  • NumPy ≥ 1.24, < 2.3
  • Numba ≥ 0.61.2

Quick Start

from mcrnmf.datasets import load_rxn_spectra
from mcrnmf import SNPA, MinVol

# load a Raman spectroscopy data (wv × time)
X, wv, t = load_rxn_spectra()

# specify the number of components
rank = 4

# generate initial guess for W and H using SNPA
snpa = SNPA(rank=rank, iter_max=1000)
snpa.fit(X)
Wi = snpa.W  # intial guess for W (pure spectra)
Hi = snpa.H  # intial guess for H (conc. profiles)


mvol = MinVol(rank=rank,
              constraint_kind=1,
              unimodality={"H": True},
              iter_max=2000,
              tol=1e-4)
# fit the Minimum Volume NMF model
mvol.fit(X=X, Wi=Wi, Hi=Hi)
# access the decomposed factors
W = mvol.W
H = mvol.H
# access relative reconstruction error at each iter.
rel_recon_err = mvol.rel_reconstruction_error_ls

More worked examples can be found in the Usage section of the documentation.


Citation

If you use McrNmf in your work, please consider citing the following preprint:

Vasudevan SA, Kohlbrenner R, Ritschel N, Vent-Schmidt T. Beyond Classical MCR-ALS—Minimum Volume NMF and Strategic Sampling for Robust Reaction Monitoring. ChemRxiv. 2025; doi:10.26434/chemrxiv-2025-qs5g4


License

MIT – see LICENSE.

Metadata

Release files for mcrnmf 0.1.2

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

Source distribution (sdist)

Source distribution for mcrnmf 0.1.2
File Size Uploaded
mcrnmf-0.1.2.tar.gz 3.8 MB Details

Built distribution (wheel)

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

Total release size: 7.5 MB

Release files / mcrnmf-0.1.2.tar.gz

Download URL mcrnmf-0.1.2.tar.gz
Size 3.8 MB
Tags Source
SHA-256 checksum
How to use checksums
33dc5bef65d6b400c67547a7e5565088313edcb5c87d039f43619da896408766
BLAKE2b-256 checksum
How to use checksums
afa638a84dfab412b9ed9d9898b8ef28f4709d17575f4f69e42c52d99620ba79
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.8

Release files / mcrnmf-0.1.2-py3-none-any.whl

Download URL mcrnmf-0.1.2-py3-none-any.whl
Size 3.8 MB
Tags Python 3
SHA-256 checksum
How to use checksums
2cf360fb76377de7245019aaf980ececf1581dc159ba20ed04c82a1256b1f351
BLAKE2b-256 checksum
How to use checksums
7645b3bd2cb74d9d29bbe43085448a8bf1a42f868f7ffdb519291dc0a915a887
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.8

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

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