我想知道在 F# 中为时间序列表示时间序列的最标准和最有效的方法是什么,包括稀疏/非稀疏情况和定期间隔/非定期间隔情况。
有没有人有使用这种语言或 OCaml 表示这些的标准方法的经验?
我首先用数组表示它们,但意识到数组不能包含诸如采样频率之类的信息。
我想知道在 F# 中为时间序列表示时间序列的最标准和最有效的方法是什么,包括稀疏/非稀疏情况和定期间隔/非定期间隔情况。
有没有人有使用这种语言或 OCaml 表示这些的标准方法的经验?
我首先用数组表示它们,但意识到数组不能包含诸如采样频率之类的信息。
这取决于您最有可能在这些时间序列中使用哪些常见操作。
像这样
type TimedValue<'T> = { ts : DateTime; value: 'T}
type TimeSerie<'T> = TimedValue<'T> seq
像这样
type TimeSerie (vals : TimedValue<double> seq) =
let mdata = Map.ofSeq (vals |> Seq.map(fun x -> x.ts, x ))
static member inline LinearReturn vb ve = ve / vb - 1.
static member inline LogReturn vb ve = log ve - log vb
member x.toReturns(times : TimeCollection, f) =
times |> Seq.pairwise |> Seq.map(fun (l,n) -> {tfrom = l; tto= n; value= f (mdata.[l].value) (mdata.[n].value) } )
member x.toLinReturns(times : TimeCollection) = x.toReturns(times, TimeSerie.LinearReturn)
member x.toLogReturns(times : TimeCollection) = x.toReturns(times, TimeSerie.LogReturn)
也许函数响应式编程就是答案:它是一种范式,您将事件绑定到函数并定义“行为”和一直在发展的信号。
时间和事件以精心设计的方式表示。
一些链接开始: http: //erratique.ch/talks/react-ocamlum-2010.pdf http://erratique.ch/software/react