Search code examples
clojure

sequence of a rolling average in Clojure


I'm looking for an elegant way to generate a sequence of the rolling average of a sequence of numbers. Hopefully something more elegant than using lazy-seq


Solution

  • Without any consideration of efficiency:

    (defn average [lst] (/ (reduce + lst) (count lst)))
    
    (defn moving-average [window lst] (map average (partition window 1 lst)))
    
    
    user> (moving-average 5 '(1 2 3 4 5 6 7 8))
    (3 4 5 6)
    

    If you need it to be fast, there are some fairly obvious improvements to be made! But it will get less elegant.