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.
See also
- Stencil which can be seen as a generalisation of Windowed Reduce in that for a vector argument,
({⊂f/⍵}⌺n)vis equivalent ton f/ vexcept in how they deal with the ends of the vector; Stencil includes "shards" and Windowed Reduce does not.
External links
Lessons
Documentation