Source code for neuralib.util.interp

import numpy as np

__all__ = ['interp_timestamp',
           'interp1d_nan']


[docs] def interp_timestamp(timestamp: np.ndarray, t0: float, t1: float, sampling_rate: float) -> tuple[np.ndarray, np.ndarray]: """ Create interpolated time and value(01) array from event timestamp `Dimension parameters`: T = number of timestamp N' = number of interpolated sample points :param timestamp: Array of event timestamps in seconds. `Array[float, T]` :param t0: Start time in seconds :param t1: End time in seconds :param sampling_rate: Sampling rate in Hz :return: Tuple of time array (`Array[float, N']`) and event array (`Array[float, N']`) """ n = int((t1 - t0) * sampling_rate) tt = np.linspace(t0, t1, num=n) sig = np.zeros(n, dtype=np.int8) indices = ((timestamp - t0) * sampling_rate).astype(int) indices = indices[(indices >= 0) & (indices < n)] sig[indices] = 1 return tt, sig
[docs] def interp1d_nan(arr: np.ndarray) -> np.ndarray: """ Interpolates missing values (NaNs) in a 1-dimensional NumPy array. :param arr: Input array with potential NaNs. `Array[float, N]` :return: Array with NaNs interpolated. `Array[float, N]` """ n = len(arr) x = np.arange(n) isnan = np.isnan(arr) if isnan.any(): if isnan.all(): raise ValueError('Input array contains only NaNs') arr_nonan = arr[~isnan] x_nonan = x[~isnan] arr[isnan] = np.interp(x[isnan], x_nonan, arr_nonan) arr_clean = arr[~np.isnan(arr)] return arr_clean