import numpy as np from converted_code.smartstd import smartstd def smartMovingStd(x, T, period=None): """ Python implementation of the MATLAB smartMovingStd function. Calculates the moving standard deviation over a rolling window, ignoring NaN and Inf values. Parameters: x (ndarray): Input array T (int): Window size period (int, optional): If provided, data is sampled every 'period' Returns: ndarray: Moving standard deviation with NaNs at the beginning """ if isinstance(x, list): x = np.array(x) # Get dimensions if len(x.shape) == 1: x = x.reshape(-1, 1) rows, cols = x.shape # Initialize output array with NaNs sd = np.full_like(x, np.nan) if period is None: # Regular moving standard deviation for t in range(T, rows + 1): sd[t-1, :] = smartstd(x[t-T:t, :]) else: # Moving standard deviation with period for t in range(T*period, rows + 1): sd[t-1, :] = smartstd(x[t-T*period:t, :]) return sd