将序列切割成固定长度的批次,使重叠的滑动数据窗口,从序列中获取每个第n项 - 所有这些任务都可以使用单个通用切片函数来解决。例如,Clojure为此目的提供partition size skip
library function。
F#核心库提供了Seq.windowed
function,它实现了重叠1的滑动窗口。Seq.windowed width
简单地等同于partition width 1
;变量partition
参数允许解决其他问题:partition size size
将序列切片为非重叠批次,partition 1 n
获取每个第n个序列项等等。
在F#中实现此类功能并不困难。我曾发布a naive prototype,它受到冗余序列评估的影响;然而,使其成为真正懒惰的生产质量F#实施绝对可行。
我想知道是否有任何特殊原因限制开箱即用的F#核心库提供序列切片到Seq.windowed
功能?
答案 0 :(得分:3)
我认为你的问题没有任何好的答案。
当然没有技术上的困难会导致无法实现更通用的滑动窗口功能。它可以实现,它将是有用的。为什么它不包含在F#核心库中?可能是因为F#团队没有尝试包含所有可能的有用功能,因为它会使核心库太大,难以维护和难以使用(如果有太多的话,找到正确的函数会很困难)。