summaryrefslogtreecommitdiff
path: root/src/python/gudhi/point_cloud
diff options
context:
space:
mode:
authormtakenouchi <m.takenouchi@jp.fujitsu.com>2020-02-14 11:08:50 +0900
committermtakenouchi <m.takenouchi@jp.fujitsu.com>2020-02-14 11:08:50 +0900
commit9cc9e1cf3cd9ea42908324d410ef68fa12e8e832 (patch)
tree76920d95f1b8ba27f31b9e2d582ba7bcc9cf92ee /src/python/gudhi/point_cloud
parenta6a4f375822cf3e2ca1866d78472e4350140ddbc (diff)
Update timedelay.py
Diffstat (limited to 'src/python/gudhi/point_cloud')
-rw-r--r--src/python/gudhi/point_cloud/timedelay.py66
1 files changed, 48 insertions, 18 deletions
diff --git a/src/python/gudhi/point_cloud/timedelay.py b/src/python/gudhi/point_cloud/timedelay.py
index f283916d..d899da67 100644
--- a/src/python/gudhi/point_cloud/timedelay.py
+++ b/src/python/gudhi/point_cloud/timedelay.py
@@ -10,30 +10,55 @@ import numpy as np
class TimeDelayEmbedding:
"""Point cloud transformation class.
-
Embeds time-series data in the R^d according to Takens' Embedding Theorem
and obtains the coordinates of each point.
-
Parameters
----------
dim : int, optional (default=3)
`d` of R^d to be embedded.
-
delay : int, optional (default=1)
Time-Delay embedding.
-
skip : int, optional (default=1)
How often to skip embedded points.
-
+ Given delay=3 and skip=2, an point cloud which is obtained by embedding
+ a single time-series data into R^3 is as follows.
+
+ .. code-block:: none
+
+ time-series = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+ point clouds = [[1, 4, 7],
+ [3, 6, 9]]
+
"""
def __init__(self, dim=3, delay=1, skip=1):
self._dim = dim
self._delay = delay
self._skip = skip
- def __call__(self, *args, **kwargs):
- return self.transform(*args, **kwargs)
+ def __call__(self, ts):
+ """Transform method for single time-series data.
+ Parameters
+ ----------
+ ts : list[float]
+ A single time-series data.
+ Returns
+ -------
+ point clouds : list[list[float, float, float]]
+ Makes point cloud every a single time-series data.
+ Raises
+ -------
+ TypeError
+ If the parameter's type does not match the desired type.
+ """
+ ndts = np.array(ts)
+ if ndts.ndim == 1:
+ return self._transform(ndts)
+ else:
+ raise TypeError("Expects 1-dimensional array.")
+ def fit(self, ts, y=None):
+ return self
+
def _transform(self, ts):
"""Guts of transform method."""
return ts[
@@ -43,22 +68,27 @@ class TimeDelayEmbedding:
]
def transform(self, ts):
- """Transform method.
-
+ """Transform method for multiple time-series data.
Parameters
----------
- ts : list[float] or list[list[float]]
- A single or multiple time-series data.
-
+ ts : list[list[float]]
+ Multiple time-series data.
+ Attributes
+ ----------
+ ndts :
+ The ndts means that all time series need to have exactly
+ the same size.
Returns
-------
- point clouds : list[list[float, float, float]] or list[list[list[float, float, float]]]
+ point clouds : list[list[list[float, float, float]]]
Makes point cloud every a single time-series data.
+ Raises
+ -------
+ TypeError
+ If the parameter's type does not match the desired type.
"""
ndts = np.array(ts)
- if ndts.ndim == 1:
- # for single.
- return self._transform(ndts).tolist()
+ if ndts.ndim == 2:
+ return np.apply_along_axis(self._transform, 1, ndts)
else:
- # for multiple.
- return np.apply_along_axis(self._transform, 1, ndts).tolist()
+ raise TypeError("Expects 2-dimensional array.")