Windowed Reduce: Difference between revisions

Jump to navigation Jump to search
135 bytes added ,  10:26, 11 September 2022
m
Text replacement - "</source>" to "</syntaxhighlight>"
No edit summary
m (Text replacement - "</source>" to "</syntaxhighlight>")
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=apl inline>(a f b f c)(b f c f d)</source>… where <source lang=apl inline>a</source>, <source lang=apl inline>b</source>, <source lang=apl inline>c</source>, <source lang=apl inline>d</source>, … are the elements of <source lang=apl inline>x</source>, grouped into windows of size <source lang=apl inline>n</source>. It works like [[Reduce]], except applied on overlapping segments of an array, and borrows most of its functionality from it. When  
When applied to a [[vector]] argument, <source lang=apl inline>n f/x</syntaxhighlight> evaluates to the expression <source lang=apl inline>(a f b f c)(b f c f d)</syntaxhighlight>… where <source lang=apl inline>a</syntaxhighlight>, <source lang=apl inline>b</syntaxhighlight>, <source lang=apl inline>c</syntaxhighlight>, <source lang=apl inline>d</syntaxhighlight>, … are the elements of <source lang=apl inline>x</syntaxhighlight>, grouped into windows of size <source 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  
<source lang=apl inline>n</source>is negative, each window is reversed before the reduction is done.
<source lang=apl inline>n</syntaxhighlight>is negative, each window is reversed before the reduction is done.
== Examples ==
== Examples ==


Line 20: Line 20:
│35 56 67 79│56 67 79 91│
│35 56 67 79│56 67 79 91│
└───────────┴───────────┘
└───────────┴───────────┘
</source>
</syntaxhighlight>


== Notable uses ==
== 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, <source lang=apl inline>1,2≠/v</source> indicates the elements that differ from their neighbour on the left. For a Boolean vector <source lang=apl inline>b</source>, the expression <source lang=apl inline>2</0,b</source> indicates the first 1 in each contiguous run of 1s.
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, <source lang=apl inline>1,2≠/v</syntaxhighlight> indicates the elements that differ from their neighbour on the left. For a Boolean vector <source lang=apl inline>b</syntaxhighlight>, the expression <source lang=apl inline>2</0,b</syntaxhighlight> indicates the first 1 in each contiguous run of 1s.


== See also ==
== See also ==


* [[Stencil]] which can be seen as a generalisation of Windowed Reduce in that for a vector argument, <source lang=apl inline>({⊂f/⍵}⌺n)v</source> is equivalent to <source lang=apl inline>n f/ v</source> except in how they deal with the ends of the vector; Stencil includes "shards" and Windowed Reduce does not.
* [[Stencil]] which can be seen as a generalisation of Windowed Reduce in that for a vector argument, <source lang=apl inline>({⊂f/⍵}⌺n)v</syntaxhighlight> is equivalent to <source 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