Windowed Reduce: Difference between revisions

Jump to navigation Jump to search
1,551 bytes added ,  13:42, 19 June 2023
m
size restrictions
(Created Windowed Reduce Page)
 
m (size restrictions)
 
(3 intermediate revisions by the same user not shown)
Line 3: Line 3:
== Description ==
== Description ==


When applied to a [[vector]] argument, <source lang=apl inline>n f/x</source> evaluates to the expression <source lang=text inline>(a f b f c)(b f c f d) </source> where <source lang=text inline>a, b, c, d, …</source> are the elements of <source lang=text inline>x</source>, grouped into windows of size <source lang=text inline>n</source>. It works like [[Reduce]], except applied on overlapping segments of an array, and borrows most of its functionality from it.
When applied to a [[vector]] argument, <syntaxhighlight lang=apl inline>n f/x</syntaxhighlight> evaluates to the expression <syntaxhighlight lang=apl inline>(a f b f c)(b f c f d)</syntaxhighlight>where <syntaxhighlight lang=apl inline>a</syntaxhighlight>, <syntaxhighlight lang=apl inline>b</syntaxhighlight>, <syntaxhighlight lang=apl inline>c</syntaxhighlight>, <syntaxhighlight lang=apl inline>d</syntaxhighlight>, … are the elements of <syntaxhighlight lang=apl inline>x</syntaxhighlight>, grouped into windows of size <syntaxhighlight lang=apl inline>n</syntaxhighlight>. It works like [[Reduce]], except applied on overlapping segments of an array, and borrows most of its functionality from it. When
<syntaxhighlight lang=apl inline>n</syntaxhighlight> is negative, each window is reversed before the reduction is done.
 
The magnitude of <syntaxhighlight lang=apl inline>n</syntaxhighlight> must be no more than 1 greater than the size of <syntaxhighlight lang=apl inline>x</syntaxhighlight> along the relevant [[axis]].


== Examples ==
== Examples ==
Line 9: Line 12:
Windowed reduce is used to apply functions on overlapping sections of array e.g. when you need the deltas of an array.
Windowed reduce is used to apply functions on overlapping sections of array e.g. when you need the deltas of an array.


<source lang=apl>
<syntaxhighlight lang=apl>
       3+/5 1 4 1 8
       3+/5 1 4 1 8
10 6 13
10 6 13
       2-/1 2 3 4 5
       2-/1 2 3 4 5
¯1 ¯1 ¯1 ¯1
¯1 ¯1 ¯1 ¯1
      ¯2-/1 2 3 4 5
1 1 1 1
       4,/35 56 67 79 91
       4,/35 56 67 79 91
┌───────────┬───────────┐
┌───────────┬───────────┐
│35 56 67 79│56 67 79 91│
│35 56 67 79│56 67 79 91│
└───────────┴───────────┘
└───────────┴───────────┘
</source>
</syntaxhighlight>
 
== 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, <syntaxhighlight lang=apl inline>1,2≠/v</syntaxhighlight> indicates the elements that differ from their neighbour on the left. For a Boolean vector <syntaxhighlight lang=apl inline>b</syntaxhighlight>, the expression <syntaxhighlight lang=apl inline>2</0,b</syntaxhighlight> 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, <syntaxhighlight lang=apl inline>({⊂f/⍵}⌺n)v</syntaxhighlight> is equivalent to <syntaxhighlight lang=apl inline>n f/ v</syntaxhighlight> except in how they deal with the ends of the vector; Stencil includes "shards" and Windowed Reduce does not.


== External links ==
== External links ==

Navigation menu