
4.2k stars · BSD-3-Clause · v1.14.1 (2026-02-08) · Track this in Rising ↗
Matrix profile — finds every repeating shape and every anomaly in a long time series without being told what to look for.
Radar check
What we found when we opened it. Every bar is one fact, with its date.
Last code pushed 16 Oct 2026, 11 days before this check.
Latest release v1.14.1 on 8 Feb 2026.
Public since May 2019, a little over 7 years.
4,168 stars and 373 forks.
40 commits and 7 new issues in the last 90 days.
46 contributors. 28 pull requests merged in 90 days.
No security policy file says how to report a problem. No published security advisories.
How the bars are scored
- Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
- Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
- Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
- Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
- Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
- Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
- Security. A published security policy 80, none 40; published advisories are listed, not scored.
Checked by Repo Radar on 27 Oct 2026 from the repository on GitHub. Covered in Edition 1.
▶Repo detailsthe review · specs · pros & cons · install
What it does
You pass it an array of numbers and a window length. It computes the matrix profile, which for every window in the series records how far it is from its nearest match elsewhere. Low values mark repeated shapes, called motifs; high values mark unusual stretches, called discords. From that one computation you get both. It scales to millions of points using Numba, which compiles Python to machine code, and can spread the work across processor cores, several machines with Dask, or a graphics card. There is also a match function that detects a known shape in new data as it arrives, and support for multiple series at once. What it does not do is tell you anything about the future: it reports which shapes recur, and most recurring shapes carry no predictive value, so filtering is on you.
Why it matters
Who it suits. Anyone with a long series of measurements and a suspicion that something in it repeats: price data, sensor readings, server metrics, demand figures. The appeal is that it needs no labels, no training and no machine-learning background. It suits anyone who would otherwise be guessing at indicator combinations. Skip it if the series is short, because the method needs length to find repetition. Skip it too if you expect strategies rather than candidates, because what comes out is a list of shapes and nothing more.
Verdict. Worth an afternoon if you have the data, with expectations set correctly. The honest framing is that it inverts the usual approach: instead of proposing a pattern and testing it, you ask the data which patterns exist and then test those. That is a better use of time, and it is still only the first half of the work. At 4,139 stars it is well established with a real maintainer team, the licence is BSD-3-Clause, which places no restriction on shipping it inside a commercial product, and version 1.14.1 was released on 8 February 2026 with code on 31 July 2026. A release that old would be worrying on its own, and it is not: the code date is the one that counts, and seven months between releases is normal for a mature library. Two limits. Memory and processor use scale with the length of the series, so three years of minute-by-minute data is roughly a million points and will need chunking. And choosing the window length is a judgement that changes every result downstream, so expect to try several.
Summary (Key Points)from the README
Key features
- Matrix profile computation: For every subsequence in a time series, finds its nearest neighbor, which is the basis for the mining tasks below.
- Mining tasks: The matrix profile supports motif discovery, anomaly (discord) discovery, shapelet discovery, semantic segmentation, streaming data, and time series chains.
- Approximate and summary methods: Offers fast approximate matrix profiles and snippets for summarizing long time series.
- Window size selection: Provides pan matrix profiles to help choose the best subsequence window size(s).
- Multiple backends: Includes single-CPU (`stump`), Dask Distributed (`stumped`), GPU (`gpu_stump`), multi-dimensional (`mstump`), and distributed multi-dimensional (`mstumped`) functions.
- Chains and segmentation helpers: Includes Anchored Time Series Chains (ATSC) and Fast Low-cost Unipotent Semantic Segmentation (FLUSS).
- Numba-compiled speed: The exact matrix profile runs as a Numba JIT-compiled version; the benchmark table uses a constant window size of m = 50.
- Largest benchmarked run: The README reports GPU-STUMP.DGX2 (16x NVIDIA Tesla V100) computing a 2^27 (134,217,728)-point series in 29:13:48.12.
Ways to install
| Platform or method | What it needs | Effort |
|---|---|---|
| conda | A conda environment (conda-forge package) | Low |
| pip | A Python environment with pip (PyPI package) | Low |
| pixi | The pixi tool | Low |
| uv | The uv tool | Low |
| From source | Steps in the documentation; the README gives no detail here | Higher |
Important
- Python version: STUMPY supports Python 3.11+ and is not compatible with Python 2.x. Older Python versions may work but are unsupported.
- Dependencies: It depends on NumPy, Numba, and SciPy. Supported NumPy and Python versions follow the NEP 29 deprecation policy.
- Benchmark conditions: Performance results use randomly generated data, specific CPU and GPU hardware, and include host-to-GPU transfer time. They may not match your setup.
- Unexplained NaN cells: The performance table contains many NaN entries, and the README does not say what they mean.
- Original papers: The authors recommend reading the original matrix profile publications to understand the algorithms and their applications.
- Support: Help is available through GitHub discussions and issues, with responses described as reasonably timely rather than guaranteed.
- License and trademark: The code is released under the 3-Clause BSD license. "STUMPY" is a trademark of TD Ameritrade IP Company, Inc.
Written by an AI model from the project’s README; not part of the review, and it can be wrong.
- Finds repeated shapes with no labels, no training and no machine-learning background needed.
- BSD-3-Clause licence, so there is no restriction on including it in a commercial product.
- Well documented with a real maintainer team, and it scales from one processor to many machines or a graphics card.
- Memory and processor use grow with the length of the series, so long histories need chunking.
- Raw repeated shapes are not strategies: most carry no predictive value, so heavy filtering follows.
- Choosing the window length is a judgement call that changes everything after it.
Pair with kernc/backtesting.py to test each surviving motif.
python3 -m venv venv source venv/bin/activate python -m pip install stumpy # or: conda install -c conda-forge stumpy
