# Vietoris–Rips Complexes¶ Dionysus can compute Vietoris–Rips complexes. Given a point set $$P$$, a Vietoris–Rips complex consists of all those simplices whose vertices are at pairwise distance no more than $$r$$, $$VR_r(P) = \{ \sigma \subseteq P \mid \forall~u,v \in \sigma, \| u - v \| \leq r \}$$.

fill_rips() computes Vietoris–Rips filtrations (up to a specified skeleton dimension and distance $$r$$). It accepts points as NumPy arrays, following the standard convention that rows of a 2-dimensional array are interpreted as points in Euclidean space:

>>> import numpy as np
>>> points = np.random.random((100,2))
>>> f = d.fill_rips(points, 2, .3)
>>> print(f)
Filtration with 5974 simplices
>>> for s in f:
...     print(s)
<0> 0
...
<9,61,92> 0.299856
<9,72,92> 0.299856
<9,82,92> 0.299856


fill_rips() also accepts condensed distance matrices (linearized lower triangular part of a symmetric matrix):

>>> from scipy.spatial.distance import pdist
>>> dists = pdist(points)
>>> f = d.fill_rips(dists, 2, .3)
>>> print(f)
Filtration with 5974 simplices


SciPy provides a helper function squareform to convert between redundant square matrices ($$n \times n$$) and condensed matrices (vectors with $${n \choose 2}$$ elements).

>>> from scipy.spatial.distance import squareform
>>> sq_dist = squareform(dists)
>>> print(sq_dist.shape)
(100, 100)
>>> print(squareform(sq_dist).shape)
(4950,)