sequences.windowed: faster windows and rolling words.
parent
05ea081cd0
commit
b78e32733e
|
@ -1,25 +1,46 @@
|
||||||
! Copyright (C) 2012 Doug Coleman.
|
! Copyright (C) 2012 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors kernel math math.order sequences ;
|
USING: accessors fry kernel math math.order math.statistics
|
||||||
|
sequences sequences.private ;
|
||||||
IN: sequences.windowed
|
IN: sequences.windowed
|
||||||
|
|
||||||
TUPLE: windowed-sequence { sequence sequence read-only } { n integer } ;
|
TUPLE: windowed-sequence
|
||||||
|
{ sequence sequence read-only }
|
||||||
|
{ n integer } ;
|
||||||
|
|
||||||
INSTANCE: windowed-sequence sequence
|
INSTANCE: windowed-sequence sequence
|
||||||
|
|
||||||
C: <windowed-sequence> windowed-sequence
|
C: <windowed-sequence> windowed-sequence
|
||||||
|
|
||||||
|
M: windowed-sequence nth-unsafe
|
||||||
|
[ 1 + ] dip [ n>> dupd [-] swap ] [ sequence>> ] bi <slice> ; inline
|
||||||
|
|
||||||
|
M: windowed-sequence length
|
||||||
|
sequence>> length ; inline
|
||||||
|
|
||||||
: in-bound ( n sequence -- n' )
|
: in-bound ( n sequence -- n' )
|
||||||
[ drop 0 ] [ length ] bi clamp ; inline
|
[ drop 0 ] [ length ] bi clamp ; inline
|
||||||
|
|
||||||
: in-bounds ( a b sequence -- a' b' sequence )
|
: in-bounds ( a b sequence -- a' b' sequence )
|
||||||
[ nip in-bound ]
|
[ nip in-bound ] [ [ nip ] dip in-bound ] [ 2nip ] 3tri ;
|
||||||
[ [ nip ] dip in-bound ]
|
|
||||||
[ 2nip ] 3tri ;
|
: rolling-map ( seq n quot: ( slice -- elt ) -- newseq )
|
||||||
|
[ <windowed-sequence> ] [ map ] bi* ; inline
|
||||||
M: windowed-sequence nth
|
|
||||||
[ [ 1 + ] dip n>> [ - ] [ drop ] 2bi ]
|
: rolling-sum ( seq n -- newseq )
|
||||||
[ nip sequence>> in-bounds <slice> ] 2bi ;
|
[ sum ] rolling-map ;
|
||||||
|
|
||||||
M: windowed-sequence length
|
: rolling-mean ( seq n -- newseq )
|
||||||
sequence>> length ;
|
[ mean ] rolling-map ;
|
||||||
|
|
||||||
|
: rolling-median ( seq n -- newseq )
|
||||||
|
[ median ] rolling-map ;
|
||||||
|
|
||||||
|
: rolling-supremum ( seq n -- newseq )
|
||||||
|
[ supremum ] rolling-map ;
|
||||||
|
|
||||||
|
: rolling-infimum ( seq n -- newseq )
|
||||||
|
[ infimum ] rolling-map ;
|
||||||
|
|
||||||
|
: rolling-count ( ... u n quot: ( ... elt -- ... ? ) -- ... v )
|
||||||
|
'[ _ count ] rolling-map ; inline
|
||||||
|
|
Loading…
Reference in New Issue