2

スパース/非スパースの場合と規則的な間隔/非規則的な間隔の場合を含む時系列のF#で時系列を表す最も標準的で効率的な方法を知りたいと思いました。

この言語またはOCamlでこれらを表現するための標準的な方法を知っている人はいますか?

それらを配列で表すことから始めましたが、配列にはサンプリング周波数などの情報を含めることができないことに気付きました。

4

2 に答える 2

3

これらの時系列で使用する可能性が最も高い一般的な操作は何かによって異なります。

  • シーケンシャルアクセスのみを行う場合は、timeserieをtimedvalueのシーケンスとして公開することをお勧めします。

そのようです

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)
于 2012-10-22T13:41:54.730 に答える
1

関数型リアクティブプログラミングがその答えかもしれません。これは、イベントを関数にバインドし、常に進化する「動作」とシグナルを定義するパラダイムです。

時間とイベントは、適切に設計された方法で表されます。

開始するためのいくつかのリンク:http: //erratique.ch/talks/react-ocamlum-2010.pdf http://erratique.ch/software/react

他のライブラリ:https ://github.com/jaked/froc

于 2012-10-21T23:48:39.123 に答える