antropy.katz_fd

antropy.katz_fd(x, axis=-1)[source]

Katz Fractal Dimension.

Parameters:
xlist or np.array

1D or N-D data.

axisint

The axis along which the FD is calculated. Default is -1 (last).

Returns:
kfdfloat

Katz fractal dimension.

Notes

Katz’s method calculates the fractal dimension of a sample as follows: the sum and average of the Euclidean distances between the successive points of the sample (\(L\) and \(a\) , resp.) are calculated as well as the maximum distance between the first point and any other point of the sample (\(d\)). The fractal dimension of the sample (\(D\)) then becomes:

\[D = \frac{\log_{10}(L/a)}{\log_{10}(d/a)} = \frac{\log_{10}(n)}{\log_{10}(d/L)+\log_{10}(n)}\]

where \(n\) is \(L\) divided by \(a\).

Original code from the mne-features package by Jean-Baptiste Schiratti and Alexandre Gramfort.

References

Examples

>>> import numpy as np
>>> import antropy as ant
>>> import stochastic.processes.noise as sn
>>> rng = np.random.default_rng(seed=42)
>>> x = sn.FractionalGaussianNoise(hurst=0.5, rng=rng).sample(10000)
>>> print(f"{ant.katz_fd(x):.4f}")
6.4713

Fractional Gaussian noise with H = 0.9

>>> rng = np.random.default_rng(seed=42)
>>> x = sn.FractionalGaussianNoise(hurst=0.9, rng=rng).sample(10000)
>>> print(f"{ant.katz_fd(x):.4f}")
4.5720

Fractional Gaussian noise with H = 0.1

>>> rng = np.random.default_rng(seed=42)
>>> x = sn.FractionalGaussianNoise(hurst=0.1, rng=rng).sample(10000)
>>> print(f"{ant.katz_fd(x):.4f}")
7.6540

Random

>>> rng = np.random.default_rng(seed=42)
>>> print(f"{ant.katz_fd(rng.random(1000)):.4f}")
8.1531

Pure sine wave

>>> x = np.sin(2 * np.pi * 1 * np.arange(3000) / 100)
>>> print(f"{ant.katz_fd(x):.4f}")
2.4871

Linearly-increasing time-series (should be 1)

>>> x = np.arange(1000)
>>> print(f"{ant.katz_fd(x):.4f}")
1.0000