Source code for utils.tracker.sliding_window
from typing import Union
import numpy as np
from ixai.utils.tracker.base import Tracker
[docs]class SlidingWindowTracker(Tracker):
"""A sliding window tracker that stores the k last elements of the stream allowing for computation of the mean and
variance of the last k values."""
def __init__(self, k: int):
assert 0 < k, "The 'window_size' must be greater than zero."
self.window_k = 0
self.k = k
self.sliding_window = np.array([np.NaN for _ in range(self.k)])
[docs] def update(self, value_i: Union[int, float]) -> "Tracker":
"""Adds one value to the Tracker
Args:
value_i (int or float): The numeric value to be added to the tracker.
"""
if self.window_k < self.k:
self.sliding_window[self.window_k] = value_i
self.window_k += 1
else:
self.window_k = 0
self.sliding_window[self.window_k] = value_i
return self
[docs] def __call__(self, *args, **kwargs):
"""Returns the current mean of the sliding window."""
return self.mean
def __repr__(self):
return f"{round(self.mean, 2)}"
@property
def mean(self):
"""Returns the current mean of the sliding window."""
return float(np.nanmean(self.sliding_window, axis=0))
@property
def var(self):
"""Returns the variance of the sliding window."""
return float(np.nanvar(self.sliding_window, axis=0))
@property
def std(self):
"""Returns the standard deviation of the sliding window."""
return float(np.nanstd(self.sliding_window, axis=0))