Source code for pyssaBSS.scatter

import numpy as np
from .utils import sample_mean, sample_covariance, sample_autocovariance
[docs] class ScatterOperator: """ Base class for all SSA scatter matrices. """
[docs] def compute(self, data, segments, coords=None): """ Returns ------- m_mat : ndarray (p, p) Scatter matrix """ raise NotImplementedError
[docs] class SIRScatter(ScatterOperator):
[docs] def compute(self, data, segments, coords=None): p, n = data.shape m_mat = np.zeros((p, p)) for segment in segments: mean_vec = sample_mean(data, segment) m_mat += (len(segment) / n) * np.outer(mean_vec, mean_vec) return m_mat
[docs] class SAVEScatter(ScatterOperator):
[docs] def compute(self, data, segments, coords=None): p, n = data.shape m_mat = np.zeros((p, p)) for segment in segments: cov_mat = np.eye(p) - sample_covariance(data, segment) m_mat += (len(segment) / n) * (cov_mat @ cov_mat) return m_mat
[docs] class CORScatter(ScatterOperator): def __init__(self, lag=1): self.lag = lag
[docs] def compute(self, data, segments): p, n = data.shape m_mat = np.zeros((p, p)) full_auto_cov = sample_autocovariance(data, self.lag) for segment in segments: cov_mat = sample_autocovariance(data, self.lag, segment) diff = full_auto_cov - cov_mat m_mat += (len(segment) / n) * (diff @ diff) return m_mat
[docs] class LCORScatter(ScatterOperator): def __init__(self, kernel): self.kernel = kernel
[docs] def compute(self, data, segments, coords): p, n = data.shape m_mat = np.zeros((p, p)) full_auto_cov = self.kernel.global_covariance(data, coords) for segment in segments: cov_mat = self.kernel.local_covariance(data, coords, segment) diff = full_auto_cov - cov_mat m_mat += (len(segment) / n) * (diff @ diff) return m_mat