Skip to main content

AntroPy: entropy and complexity of time-series in Python

Project description


https://badge.fury.io/py/antropy.svg https://img.shields.io/conda/vn/conda-forge/antropy.svg https://img.shields.io/github/license/raphaelvallat/antropy.svg https://github.com/raphaelvallat/antropy/actions/workflows/python_tests.yml/badge.svg https://codecov.io/gh/raphaelvallat/antropy/branch/master/graph/badge.svg https://static.pepy.tech/badge/antropy Ruff
https://raw.githubusercontent.com/raphaelvallat/antropy/master/docs/pictures/logo.png

AntroPy is a Python package for computing entropy and fractal dimension measures of time-series. It is designed for speed (Numba JIT compilation) and ease of use, and works on both 1-D and N-D arrays. Typical use cases include feature extraction from physiological signals (e.g. EEG, ECG, EMG), and signal processing research.


Functions

Entropy

Function

Description

ant.perm_entropy

Permutation entropy — captures ordinal patterns in the signal.

ant.spectral_entropy

Spectral (power-spectrum) entropy via FFT or Welch method.

ant.svd_entropy

Singular value decomposition entropy of the time-delay embedding matrix.

ant.app_entropy

Approximate entropy (ApEn) — regularity measure sensitive to the length of the signal.

ant.sample_entropy

Sample entropy (SampEn) — less biased alternative to ApEn.

ant.lziv_complexity

Lempel-Ziv complexity for symbolic / binary sequences.

ant.num_zerocross

Number of zero-crossings.

ant.hjorth_params

Hjorth mobility and complexity parameters.

Fractal dimension

Function

Description

ant.petrosian_fd

Petrosian fractal dimension.

ant.katz_fd

Katz fractal dimension.

ant.higuchi_fd

Higuchi fractal dimension — slope of log curve-length vs log interval.

ant.detrended_fluctuation

Detrended fluctuation analysis (DFA) — estimates the Hurst / scaling exponent.


Installation

AntroPy requires Python 3.10+ and depends on NumPy (≥ 1.22.4), SciPy (≥ 1.8.0), scikit-learn (≥ 1.2.0), and Numba (≥ 0.57).

# pip
pip install antropy

# uv
uv pip install antropy

# conda
conda install -c conda-forge antropy

Development installation

git clone https://github.com/raphaelvallat/antropy.git
cd antropy
uv pip install --group=test --editable .
pytest --verbose

Quick start

Entropy measures

import numpy as np
import antropy as ant

np.random.seed(1234567)
x = np.random.normal(size=3000)

print(ant.perm_entropy(x, normalize=True))
print(ant.spectral_entropy(x, sf=100, method='welch', normalize=True))
print(ant.svd_entropy(x, normalize=True))
print(ant.app_entropy(x))
print(ant.sample_entropy(x))
print(ant.hjorth_params(x))             # mobility in samples⁻¹
print(ant.hjorth_params(x, sf=100))     # mobility in Hz
print(ant.num_zerocross(x))
print(ant.lziv_complexity('01111000011001', normalize=True))
0.9995              # perm_entropy        (0 = regular, 1 = random)
0.9941              # spectral_entropy     (0 = pure tone, 1 = white noise)
0.9999              # svd_entropy
2.0152              # app_entropy
2.1986              # sample_entropy
(1.4313, 1.2153)    # hjorth (mobility, complexity)
(143.1339, 1.2153)  # hjorth with sf=100 Hz
1531                # num_zerocross
1.3598              # lziv_complexity (normalized)

Fractal dimension

print(ant.petrosian_fd(x))
print(ant.katz_fd(x))
print(ant.higuchi_fd(x))
print(ant.detrended_fluctuation(x))
1.0311    # petrosian_fd
5.9543    # katz_fd
2.0037    # higuchi_fd   (≈ 2 for white noise)
0.4790    # DFA alpha    (≈ 0.5 for white noise)

N-D arrays

Some functions accept N-D arrays and an axis argument, making it easy to process multi-channel data in a single call:

import numpy as np
import antropy as ant

# 4 channels × 3000 samples
X = np.random.normal(size=(4, 3000))

pe   = ant.perm_entropy(X, normalize=True, axis=-1)          # shape (4,)
mob, com = ant.hjorth_params(X, sf=256, axis=-1)             # shape (4,) each
nzc  = ant.num_zerocross(X, normalize=True, axis=-1)         # shape (4,)
se   = ant.spectral_entropy(X, sf=256, normalize=True)       # shape (4,)

Performance

Benchmarks on a MacBook Pro M1 Max (2021):

Function

1 000 samples

10 000 samples

Complexity

ant.perm_entropy

24 µs

87 µs

O(n) ¹

ant.spectral_entropy

141 µs

863 µs

O(n log n) ⁴

ant.svd_entropy

35 µs

140 µs

O(n·m²) ²

ant.app_entropy

1.5 ms

45.9 ms

O(n²) worst ⁵

ant.sample_entropy

917 µs

46.0 ms

O(n²) worst ⁵

ant.lziv_complexity

241 µs

25.2 ms

O(n²/log n)

ant.num_zerocross

2.5 µs

6 µs

O(n)

ant.hjorth_params

19 µs

44 µs

O(n)

ant.petrosian_fd

6 µs

14 µs

O(n)

ant.katz_fd

9 µs

22 µs

O(n)

ant.higuchi_fd

7 µs

92 µs

O(n·kmax) ³

ant.detrended_fluctuation

99 µs

1.4 ms

O(n log n)

¹ perm_entropy: O(n) for order ∈ {3, 4} (default), O(n·m·log m) for order > 4. ² svd_entropy: m = order (default 3). ³ higuchi_fd: kmax = max interval (default 10). ⁴ spectral_entropy: O(n log n) for FFT method, O(n) for Welch with fixed nperseg (default). ⁵ app_entropy / sample_entropy: O(n²) worst case, empirically ~O(n^1.5) via KDTree average case.

Numba functions (sample_entropy, higuchi_fd, detrended_fluctuation) incur a one-time compilation cost on the first call.


Contributing

AntroPy was created and is maintained by Raphael Vallat. Contributions are welcome — feel free to open an issue or submit a pull request on GitHub.

Note: this program is provided with NO WARRANTY OF ANY KIND. Always validate results against known references.


Acknowledgements

Several functions in AntroPy were adapted from:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

antropy-0.2.2.tar.gz (30.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

antropy-0.2.2-py3-none-any.whl (23.5 kB view details)

Uploaded Python 3

File details

Details for the file antropy-0.2.2.tar.gz.

File metadata

  • Download URL: antropy-0.2.2.tar.gz
  • Upload date:
  • Size: 30.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.11

File hashes

Hashes for antropy-0.2.2.tar.gz
Algorithm Hash digest
SHA256 87a911b718a8e84e4998c6685c5939364c6970be851b974ef0216bcc6f5b7eb5
MD5 7b10a5ace01a927b794edb8716767071
BLAKE2b-256 9e73fc4b3e17c42b7023c424479c7839c037cd3efe0093293a48debac7844639

See more details on using hashes here.

File details

Details for the file antropy-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: antropy-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 23.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.11

File hashes

Hashes for antropy-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 da8102e147c8c188ed90214b7f4f3e2f67405c16f5fb6d6d0b706e4da4de9693
MD5 08b887506920fa2596c514f502b7fc49
BLAKE2b-256 3d22a09ea9f1ff0f484066a583ad28e048377e5c040ab9d3670aace27b8be895

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page