12345678910111213141516171819202122232425262728293031323334 |
- __all__ = ["extract_candidates"]
- import numpy as np
- import stumpy
- def extract_candidates(
- ear_ts: np.ndarray,
- window_length:int=100,
- max_matches:int=10
- ) -> list[np.ndarray]:
- """
- Extracts candidate motifs from the given time series using the Matrix Profile algorithm.
- Parameters:
- - ear_ts (np.ndarray): The input time series.
- - window_length (int): The length of the sliding window used for candidates extraction. Default is 100. Should be based on the FPS of the video.
- - max_matches (int): The maximum number of candidates to extract. Default is 10.
- Returns:
- - candidates (list[np.ndarray]): A list of candidate candidates extracted from the time series.
- """
- # input validation
- if not isinstance(ear_ts, np.ndarray):
- raise TypeError("ear_ts must be a numpy array")
- if ear_ts.ndim != 1:
- raise ValueError("ear_ts must be a 1D array")
- if not isinstance(window_length, int):
- raise TypeError("window_length must be an integer")
- if not isinstance(max_matches, int):
- raise TypeError("max_matches must be an integer")
-
- mp = stumpy.stump(ear_ts, window_length) # matrix profile
- _, candidates_idx = stumpy.motifs(ear_ts, mp[:, 0], max_matches=max_matches)
- return [ear_ts[idx:idx+window_length] for idx in (candidates_idx[0] + window_length // 2)]
|