# Windowed Reduce

Windowed Reduce (`/`, `⌿`), also called N-wise Reduce, is a primitive monadic operator which takes a dyadic function, and derives a dyadic function which reduces each overlapping "window" in its right argument of the size given by its left argument.

## Description

When applied to a vector argument, `n f/x` evaluates to the expression `(a f b f c)(b f c f d)`… where `a`, `b`, `c`, `d`, … are the elements of `x`, grouped into windows of size `n`. It works like Reduce, except applied on overlapping segments of an array, and borrows most of its functionality from it. When `n` is negative, each window is reversed before the reduction is done.

The magnitude of `n` must be no more than 1 greater than the size of `x` along the relevant axis.

## Examples

Windowed reduce is used to apply functions on overlapping sections of array e.g. when you need the deltas of an array.

```      3+/5 1 4 1 8
10 6 13
2-/1 2 3 4 5
¯1 ¯1 ¯1 ¯1
¯2-/1 2 3 4 5
1 1 1 1
4,/35 56 67 79 91
┌───────────┬───────────┐
│35 56 67 79│56 67 79 91│
└───────────┴───────────┘```

## Notable uses

Windowed Reduce is especially common with a left argument of 2 or ¯2, as it is then a pair-wise application of the operand between neighbouring elements, and especially so with comparison functions. For example, `1,2≠/v` indicates the elements that differ from their neighbour on the left. For a Boolean vector `b`, the expression `2</0,b` indicates the first 1 in each contiguous run of 1s.

• Stencil which can be seen as a generalisation of Windowed Reduce in that for a vector argument, `({⊂f/⍵}⌺n)v` is equivalent to `n f/ v` except in how they deal with the ends of the vector; Stencil includes "shards" and Windowed Reduce does not.