Using as_strided , you would do something like this:
import numpy as np from numpy.lib.stride_tricks import as_strided def windowed_view(arr, window, overlap): arr = np.asarray(arr) window_step = window - overlap new_shape = arr.shape[:-1] + ((arr.shape[-1] - overlap) // window_step, window) new_strides = (arr.strides[:-1] + (window_step * arr.strides[-1],) + arr.strides[-1:]) return as_strided(arr, shape=new_shape, strides=new_strides)
If you pass a 1D array to the aforementioned function, it will return a 2D representation to that array with the form (number_of_windows, window_size) so you can calculate, for example. window value means:
win_avg = np.mean(windowed_view(arr, win_size, win_overlap), axis=-1)
For instance:
>>> a = np.arange(16) >>> windowed_view(a, 4, 2) array([[ 0, 1, 2, 3], [ 2, 3, 4, 5], [ 4, 5, 6, 7], [ 6, 7, 8, 9], [ 8, 9, 10, 11], [10, 11, 12, 13], [12, 13, 14, 15]]) >>> windowed_view(a, 4, 1) array([[ 0, 1, 2, 3], [ 3, 4, 5, 6], [ 6, 7, 8, 9], [ 9, 10, 11, 12], [12, 13, 14, 15]])