- Notifications
You must be signed in to change notification settings - Fork58
AntroPy: entropy and complexity of (EEG) time-series in Python
License
raphaelvallat/antropy
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
AntroPy is a Python 3 package providing several time-efficient algorithms for computing the complexity of time-series.It can be used for example to extract features from EEG signals.
AntroPy can be installed with pip
pip install antropy
or conda
conda config --add channels conda-forgeconda config --set channel_priority strictconda install antropy
To build and install from source, clone this repository or download the source archive and decompress the files
cd antropypip install".[test]"# install the packagepip install -e".[test]"# or editable installpytest
Dependencies
Entropy
importnumpyasnpimportantropyasantnp.random.seed(1234567)x=np.random.normal(size=3000)# Permutation entropyprint(ant.perm_entropy(x,normalize=True))# Spectral entropyprint(ant.spectral_entropy(x,sf=100,method='welch',normalize=True))# Singular value decomposition entropyprint(ant.svd_entropy(x,normalize=True))# Approximate entropyprint(ant.app_entropy(x))# Sample entropyprint(ant.sample_entropy(x))# Hjorth mobility and complexityprint(ant.hjorth_params(x))# Number of zero-crossingsprint(ant.num_zerocross(x))# Lempel-Ziv complexityprint(ant.lziv_complexity('01111000011001',normalize=True))
0.99953716942908710.99408828254224310.99991109783160782.0152213185285642.198595813245399(1.4313385010057378, 1.215335712274099)15311.3597696150205727
Fractal dimension
# Petrosian fractal dimensionprint(ant.petrosian_fd(x))# Katz fractal dimensionprint(ant.katz_fd(x))# Higuchi fractal dimensionprint(ant.higuchi_fd(x))# Detrended fluctuation analysisprint(ant.detrended_fluctuation(x))
1.03106433857536085.9542721566659262.0050406322582510.47903505674073327
Here are some benchmarks computed on a MacBook Pro (2020).
importnumpyasnpimportantropyasantnp.random.seed(1234567)x=np.random.rand(1000)# Entropy%timeitant.perm_entropy(x)%timeitant.spectral_entropy(x,sf=100)%timeitant.svd_entropy(x)%timeitant.app_entropy(x)# Slow%timeitant.sample_entropy(x)# Numba# Fractal dimension%timeitant.petrosian_fd(x)%timeitant.katz_fd(x)%timeitant.higuchi_fd(x)# Numba%timeitant.detrended_fluctuation(x)# Numba
106 µs ± 5.49 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)138 µs ± 3.53 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)40.7 µs ± 303 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)2.44 ms ± 134 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)2.21 ms ± 35.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)23.5 µs ± 695 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)40.1 µs ± 2.09 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)13.7 µs ± 251 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)315 µs ± 10.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
AntroPy was created and is maintained byRaphael Vallat. Contributions are more than welcome so feel free to contact me, open an issue or submit a pull request!
To see the code or report a bug, please visit theGitHub repository.
Note that this program is provided withNO WARRANTY OF ANY KIND. Always double check the results.
Several functions of AntroPy were adapted from:
- MNE-features:https://github.com/mne-tools/mne-features
- pyEntropy:https://github.com/nikdon/pyEntropy
- pyrem:https://github.com/gilestrolab/pyrem
- nolds:https://github.com/CSchoel/nolds
All the credit goes to the author of these excellent packages.
About
AntroPy: entropy and complexity of (EEG) time-series in Python