Distance on Persistent Diagrams¶
There are two distances on persistent diagrams supported by torch-tda
. They are Wasserstein and Bottleneck distance.
Bottleneck¶
[11]:
from torch_tda.nn import BottleneckLayerHera
import torch
from torch_tda.nn import RipsLayer
import numpy as np
import bats
def compute_bot_dist_b0_b1(X,Y):
X = np.array(X, order = 'c') # necessary!!! If you data is not stored in C style
Y = np.array(Y, order = 'c')
# compute PH
flags = (bats.standard_reduction_flag(),bats.compression_flag())
layer = RipsLayer(maxdim=1, reduction_flags=flags)
Xt = torch.tensor(X, dtype=torch.double)
Yt = torch.tensor(Y, dtype=torch.double)
X_dgm = layer(Xt)
Y_dgm = layer(Yt)
# find bottleneck distance by Hera
crit = BottleneckLayerHera()
bd0 = crit(Y_dgm[0], X_dgm[0])
bd1 = crit(Y_dgm[1], X_dgm[1])
return bd0.detach().numpy().item(), bd1.detach().numpy().item()
[12]:
X = np.random.randn(50,3)
Y = np.random.randn(50,3)
bd0, bd1 = compute_bot_dist_b0_b1(X,Y)
bd0, bd1
[12]:
(0.7630672608576625, 0.5585602944591721)
Wasserstein¶
Coming soon!