summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryuichi-ike <yuichi.ike.1990@gmail.com>2020-05-22 10:22:31 +0900
committeryuichi-ike <yuichi.ike.1990@gmail.com>2020-05-22 10:22:31 +0900
commit2ccc5ea97a5979f80fec93863da5549e4e6f2eea (patch)
tree187d8a3b84d144755f63d69bd9581f4d662eca35
parentc4e93ba5f1d003c442e3d56d6a0b3e80651dd6ec (diff)
class name changed, documents modified
-rw-r--r--src/python/doc/rips_complex_ref.rst4
-rw-r--r--src/python/doc/rips_complex_user.rst8
-rw-r--r--src/python/gudhi/dtm_rips_complex.py12
-rw-r--r--src/python/test/test_dtm_rips_complex.py6
4 files changed, 18 insertions, 12 deletions
diff --git a/src/python/doc/rips_complex_ref.rst b/src/python/doc/rips_complex_ref.rst
index f781fd92..2aa6b268 100644
--- a/src/python/doc/rips_complex_ref.rst
+++ b/src/python/doc/rips_complex_ref.rst
@@ -32,9 +32,9 @@ Weighted Rips complex reference manual
DTM Rips complex reference manual
=================================
-.. autoclass:: gudhi.dtm_rips_complex.DtmRipsComplex
+.. autoclass:: gudhi.dtm_rips_complex.DTMRipsComplex
:members:
:undoc-members:
:show-inheritance:
- .. automethod:: gudhi.dtm_rips_complex.DtmRipsComplex.__init__ \ No newline at end of file
+ .. automethod:: gudhi.dtm_rips_complex.DTMRipsComplex.__init__ \ No newline at end of file
diff --git a/src/python/doc/rips_complex_user.rst b/src/python/doc/rips_complex_user.rst
index ac11a4b6..450e6c1a 100644
--- a/src/python/doc/rips_complex_user.rst
+++ b/src/python/doc/rips_complex_user.rst
@@ -378,6 +378,7 @@ Example from a point cloud combined with DistanceToMeasure
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Combining with DistanceToMeasure, one can compute the DTM-filtration of a point set, as in `this notebook <https://github.com/GUDHI/TDA-tutorial/blob/master/Tuto-GUDHI-DTM-filtrations.ipynb>`_.
+Remark that DTMRipsComplex class provides exactly this function.
.. testcode::
@@ -402,14 +403,15 @@ The output is:
DTM Rips Complex
----------------
-`DtmdRipsComplex <rips_complex_ref.html#dtm-rips-complex-reference-manual>`_ builds a simplicial complex from a point set or a full distence matrix (in the form of ndarray), as described in the above example.
+`DTMRipsComplex <rips_complex_ref.html#dtm-rips-complex-reference-manual>`_ builds a simplicial complex from a point set or a full distence matrix (in the form of ndarray), as described in the above example.
+This class constructs a weighted Rips complex giving larger weights to outliers, which reduces their impact on the persistence diagram. See `this notebook <https://github.com/GUDHI/TDA-tutorial/blob/master/Tuto-GUDHI-DTM-filtrations.ipynb>`_ for some experiments.
.. testcode::
import numpy as np
- from gudhi.dtm_rips_complex import DtmRipsComplex
+ from gudhi.dtm_rips_complex import DTMRipsComplex
pts = np.array([[2.0, 2.0], [0.0, 1.0], [3.0, 4.0]])
- dtm_rips = DtmRipsComplex(points=pts, k=2)
+ dtm_rips = DTMRipsComplex(points=pts, k=2)
st = dtm_rips.create_simplex_tree(max_dimension=2)
print(st.persistence())
diff --git a/src/python/gudhi/dtm_rips_complex.py b/src/python/gudhi/dtm_rips_complex.py
index 6d2f9f31..70c8e5dd 100644
--- a/src/python/gudhi/dtm_rips_complex.py
+++ b/src/python/gudhi/dtm_rips_complex.py
@@ -12,7 +12,7 @@ from gudhi.weighted_rips_complex import WeightedRipsComplex
from gudhi.point_cloud.dtm import DistanceToMeasure
from scipy.spatial.distance import cdist
-class DtmRipsComplex(WeightedRipsComplex):
+class DTMRipsComplex(WeightedRipsComplex):
"""
Class to generate a DTM Rips complex from a distance matrix or a point set,
in the way described in :cite:`dtmfiltrations`.
@@ -28,7 +28,7 @@ class DtmRipsComplex(WeightedRipsComplex):
"""
Args:
points (Sequence[Sequence[float]]): list of points.
- distance_matrix (ndarray): full distance matrix.
+ distance_matrix (numpy.ndarray): full distance matrix.
k (int): number of neighbors for the computation of DTM. Defaults to 1, which is equivalent to the usual Rips complex.
q (float): order used to compute the distance to measure. Defaults to 2.
max_filtration (float): specifies the maximal filtration value to be considered.
@@ -39,8 +39,12 @@ class DtmRipsComplex(WeightedRipsComplex):
points=[]
distance_matrix = cdist(points,points)
self.distance_matrix = distance_matrix
- dtm = DistanceToMeasure(k, q=q, metric="precomputed")
+
# TODO: address the error when k is too large
- self.weights = dtm.fit_transform(distance_matrix)
+ if k <= 1:
+ self.weights = [0] * len(distance_matrix)
+ else:
+ dtm = DistanceToMeasure(k, q=q, metric="precomputed")
+ self.weights = dtm.fit_transform(distance_matrix)
self.max_filtration = max_filtration
diff --git a/src/python/test/test_dtm_rips_complex.py b/src/python/test/test_dtm_rips_complex.py
index bc6e5a59..7cd2ad90 100644
--- a/src/python/test/test_dtm_rips_complex.py
+++ b/src/python/test/test_dtm_rips_complex.py
@@ -8,14 +8,14 @@
- YYYY/MM Author: Description of the modification
"""
-from gudhi.dtm_rips_complex import DtmRipsComplex
+from gudhi.dtm_rips_complex import DTMRipsComplex
import numpy as np
from math import sqrt
import pytest
def test_dtm_rips_complex():
pts = np.array([[2.0, 2.0], [0.0, 1.0], [3.0, 4.0]])
- dtm_rips = DtmRipsComplex(points=pts, k=2)
+ dtm_rips = DTMRipsComplex(points=pts, k=2)
st = dtm_rips.create_simplex_tree(max_dimension=2)
st.persistence()
persistence_intervals0 = st.persistence_intervals_in_dimension(0)
@@ -23,7 +23,7 @@ def test_dtm_rips_complex():
def test_compatibility_with_rips():
distance_matrix = np.array([[0, 1, 1, sqrt(2)], [1, 0, sqrt(2), 1], [1, sqrt(2), 0, 1], [sqrt(2), 1, 1, 0]])
- dtm_rips = DtmRipsComplex(distance_matrix=distance_matrix, max_filtration=42)
+ dtm_rips = DTMRipsComplex(distance_matrix=distance_matrix, max_filtration=42)
st = dtm_rips.create_simplex_tree(max_dimension=1)
assert list(st.get_filtration()) == [
([0], 0.0),