seq 上的滑动窗口

Posted

技术标签:

【中文标题】seq 上的滑动窗口【英文标题】:Sliding window over seq 【发布时间】:2010-11-28 12:17:47 【问题描述】:

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

【问题讨论】:

【参考方案1】:

我认为partition 第 1 步可以做到:

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

【讨论】:

【参考方案2】:

如果你想在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)

【讨论】:

【参考方案3】:

我不知道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))))))

【讨论】:

以上是关于seq 上的滑动窗口的主要内容,如果未能解决你的问题,请参考以下文章

TCP可靠传输滑动窗口流量控制拥塞控制

TCP可靠传输滑动窗口流量控制拥塞控制

TCP可靠传输滑动窗口流量控制拥塞控制

TCP可靠传输滑动窗口流量控制拥塞控制

基于 R 中的备用列,跨数据帧的均值滑动窗口

GPU 上的广义滑动窗口计算