スパース/非スパースの場合と規則的な間隔/非規則的な間隔の場合を含む時系列の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
他のライブラリ:https ://github.com/jaked/froc