import numpy as np def movingStd(x, T, period=None): """ Python implementation of the MATLAB movingStd function. Calculates the standard deviation over a rolling window of T days. Parameters: x (ndarray): Input array for moving standard deviation calculation T (int): Window size for standard deviation calculation 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, :] = np.std(x[t-T:t, :], axis=0, ddof=0) # Using ddof=0 to normalize by N (not N-1) else: # Moving standard deviation with period for t in range(T*period, rows + 1): sd[t-1, :] = np.std(x[t-T*period:t, :], axis=0, ddof=0) return sd