# Windowed Reduce

**Windowed Reduce** (`/`

, `⌿`

), also called **N-wise Reduce**, is a primitive dyadic operator which takes a dyadic function, and a number as its left argument, inserts it between the overlapping "windows" of the size of its left argument, and evaluates it into a single array in right-to-left order.

## 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.

## See also

- 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.

## External links

### Lessons

### Documentation