# Windowed Reduce

(Redirected from Windowed Reduction First)
 `/` `⌿`

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.

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