【发布时间】:2023-03-25 08:02:01
【问题描述】:
在 Clojure 中,在(有限的,不太大的)seq 上设置滑动窗口的最佳方式是什么?我应该只使用drop 和take 并跟踪当前索引,还是我缺少更好的方法?
【问题讨论】:
标签: clojure seq sliding-window
在 Clojure 中,在(有限的,不太大的)seq 上设置滑动窗口的最佳方式是什么?我应该只使用drop 和take 并跟踪当前索引,还是我缺少更好的方法?
【问题讨论】:
标签: clojure seq sliding-window
我认为partition 第 1 步可以做到:
user=> (partition 3 1 [3 1 4 1 5 9])
((3 1 4) (1 4 1) (4 1 5) (1 5 9))
【讨论】:
如果你想在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)
【讨论】:
我不知道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))))))
【讨论】: