在seq上滑动窗口

时间:2009-09-15 15:30:25

标签: clojure window sliding seq

在Clojure中,在(有限的,不是太大的)seq上设置滑动窗口最好的方法是什么?我应该只使用droptake并跟踪当前的索引,还是有一种更好的方式我缺席?

3 个答案:

答案 0 :(得分:20)

我认为步骤1的partition可以做到:

user=> (partition 3 1 [3 1 4 1 5 9])
((3 1 4) (1 4 1) (4 1 5) (1 5 9))

答案 1 :(得分:3)

如果您想在Windows上操作,使用map:

也可以方便地进行操作
user=> (def a [3 1 4 1 5 9])
user=> (map (partial apply +) (partition 3 1 a))
(8 6 10 15)
user=> (map + a (next a) (nnext a))
(8 6 10 15)

答案 2 :(得分:0)

我不知道partition可以做到这一点,所以我以这种方式实现了

(defn sliding-window [seq length]
  (loop [result ()
         remaining seq]
    (let [chunk (take length remaining)]
      (if (< (count chunk) length)
        (reverse result)
        (recur (cons chunk result) (rest remaining))))))