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!