package datascience // RollingWindow genera ventanas deslizantes de tamaƱo size sobre el slice xs. // Si size <= 0 o size > len(xs), retorna nil. func RollingWindow[T any](xs []T, size int) [][]T { n := len(xs) if size <= 0 || size > n { return nil } windows := make([][]T, 0, n-size+1) for i := 0; i <= n-size; i++ { w := make([]T, size) copy(w, xs[i:i+size]) windows = append(windows, w) } return windows }