Syntropy documentation¶
Syntropy is a Python library for multivariate information theoretic analysis of discrete and continuous data. It provides efficient implementations of a large variety of information measures, from basic functionns like the Shannon entropy, mutual information, and Kullback-Leibler divergence, to modern constsructs like the partial information decomposition, higher-order measures (e.g. the O-information), and information rates time series data.
Example¶
# Example with discrete distribution.
from syntropy.discrete import mutual_information
from syntropy.discrete.distributions import XOR_DIST
ptw, avg = mutual_information(
idxs_x = (0,1),
idxs_y = (2,),
joint_distribution=XOR_DIST
)
print(f"I(X1,X2 ; Y) = {avg}") # Equal to 1 bit.
# Example with Gaussian estimator
import numpy as np
from scipy.stats import multivariate_normal
from syntropy.gaussian import mutual_information
num_samples = 100_000
cov = np.array([
[0.99999999, 0.24404644, 0.65847509],
[0.24404644, 0.99999985, 0.24163274],
[0.65847509, 0.24163274, 0.99999996]
])
data = multivariate_normal.rvs(
mean = [0,0,0],
cov = cov,
size=num_samples
).T
avg = mutual_information(
idxs_x=(0,1),
idxs_y=(2,), cov=np.cov(data, ddof=0.0)
)
print(f"I(X;Y) = {avg:.3} nat")
# Example with Kraskov estimator
from syntropy.knn import mutual_information
num_samples = 10_000
rand = np.random.randn(num_samples)
data = np.vstack((rand, rand))
data[1,:] = (data[0,:]**2) + np.random.randn(num_samples)
ptw, avg = mutual_information(
idxs_x=(0,),
idxs_y=(1,),
data=data,
k = 5,
algorithm = 1 # Whether to use the KSG1 or KSG2 MI estimator.
)
print(f"I(X;Y) = {avg:.3} nat")
Getting Started:
API Reference:
Additional Information: