2014-01-01から1年間の記事一覧
> let x = (3,4);; val x : int * int = (3, 4) > fst x;; val it : int = 3 > fst x - 1;; val it : int = 2 > fst x -1;; fst x -1;; ----^ stdin(15,5): error FS0001: Type mismatch. Expecting a ('a -> 'b) * 'c but given a int * int The type ''a -…
掲題の件、そういうことです。はじめ let a = 1 let c = (2, 3) let b = 4 match (a,b) with | (_, 1) -> "A" | ((fst c)-1, _) -> "B" | _ -> "C" のように書いていたのだが、だめだった。 これは let a = 1 let c = (2, 3) let b = 4 match (a,b) with | (…
このポストの概要 逐次モンテカルロ法 (Sequential Monte Carlo: SMC)/粒子フィルタ(Particle Filter)は、状態空間モデルの状態変数の系列を観測値の系列 のみから推定するアルゴリズム パッケージを使ってもいいんだど、お勉強も兼ねて自分でコード書いてみ…
簡単なんだけど、やってなかったなって。ブラウン橋言ってる人もいるし、ブラウニアン橋いってる人もいてどっちが正しいのかわかんねぇけど、ここではブラウン橋でいく。ブラウン橋は、を標準ブラウン運動として と書かれる確率過程だと思っておけばいい。こ…
行列でもたまに混乱するのに、更に次元が上がった多次元配列になんてなるともう???ってなる低能です。もちろん、配列を使うのではなくて、"行列を要素に持つリスト"を使うのも手かとは思いますが、arrayの方が便利そうだったので、行列を一次元だけあげた…
今更感あるが、諸事情によりメモ。やりたいことは(定常性を仮定した)AR(1)モデルの自己相関係数がちゃんと理論値と一致するのかを見たいって話。 AR(1)モデルとは AR(1)は、適当な確率過程 が、 に従うようなモデル。ここで、 は独立な平均0、標準偏差の正規…
c++ - Check if a class has a member function of a given signature - Stack Overflow に習う感じでやるのがよいか。SFINAE〜って奴です。 ここではToStringというintを引数にとってstd::stringを返すメンバーが任意のクラスにあるかないかで処理を切り分…
コンソールでちゃっとF#をエンジョイしたい、そんな時、あると思います。 ただ、同時にMathNet.Numericsなんかのライブラリを参照したい時、いちいち読み込むのがめんどいので、そいつを自動化しようという話。使いそうなライブラリは全部 C:\FsLib に突っ込…
高次元の配列に対する処理を書こうと思うと、その各次元に対応したループインデックスに対するfor分のネストがえらいことになる、そんな時あると思います。 F#でやるならどうしようかと考えて以下のようなコードを書いた。List.collectが便利ってことに気が…
C++での「数値→文字列」の変換。 昔はstringstreamを使って数行コードを書いて変換しなきゃならんかったもんが、C++11だとto_string関数一発でいけるようになっていた。進化するC++ありがたい。 #include <iostream> #include <string> int main() { const std::string x = std</string></iostream>…
リアル・マネーボール界隈では超有名で、知らない人はもぐりと言われるブログである 300億円欲しい の著者@gg_hatano氏がRで, 長さ100の数列があって, 連続する5個の数の和を全て(96個)欲しいとき, どうすれば賢いかな— はたむ (@gg_hatano) 2014, 4月 28な…
F#でいろんな乱数を作りたい - My Life as a Mock Quant で作成した乱数などを保存したい場合のお話。以下のコードでOKだった。 using (System.IO.File.CreateText("test.txt")) (fun file -> Normal.Samples(new MersenneTwister(), 1.0, 3.0) |> Seq.take …
掲題の件、System.Randomを使うと言うという手もありますが、やはり一様乱数だけだと不便なので、統計系に強いライブラリの助けを借りて作業したい、そういうことです。 それにはMath.NET Numerics Math.NET Numerics を使うと良い。とりあえず、NuGetなりで…
多次元配列もそうなんだろうけど、「*」を使うことによって、行列のある行・列を抽出することができるぞと。 さらに例えば「1..1」と書くか「1」と書くかで、返却が一次元配列になるか二次元配列になるかをコントロールすることができる。 > let x = Array2D…
クラスのメソッドだろうが、関数だろうがそこんとこ区別しないいF#さん素敵ですという話。 以下の例は、Hogeクラスのメソッド(func)を、関数gを引数に取る関数fに対して、hoge.funcを突っ込んでもちゃんと動くぞという確認。 > type Hoge() = member this.fu…
長い計算(シミュレーション)を、遅い遅いと言われているR上で走らせるととんでもない時間がかかる。 なので「ご飯の用意をしつつ計算させておいて、その計算が終わったらまた別な計算を行いたい」みたいな状況だと、 計算の終了を音で知らせてアナウンスして…
"長さ(m or km etc)"やら"時間(s or hour etc)"などの単位が絡んだ計算、特に金融なんかだと為替レートが絡んだ計算で、かけ算すべきなのか割り算すべきなのかよく間違えますよね?そんな貴方にお勧めしたいF#です。以下、ドル円レートの変換を計算するとい…
むかーしに書いた記事 xtsへのコンバート - My Life as a Mock Quant のやり方「as.xts(read.zoo(hoge))」だと、日中足のデータが正しく読めねぇよ!Rでの日中足の扱いはググっても情報が少ない。昨夜のも日足データなら、 y<-as.xts(zoo(x)) だけでおk(by …
たとえばExcel上に行列っぽく固まっているデータ を、チャっとCtrl+Cでコピッて、CSVファイルっぽくしたいな、そういう時はF#の出番です。 コピーした状態で以下のコードを実行すればよい。 > open System.Windows.Forms;; > Clipboard.GetText().Split('\r'…
F#で適当なクラスのオブジェクトを作って、それを他の変数にlet束縛しても、それは値の丸コピーではなくて、参照になるとそういうことです。 > type Hoge(x:int)= - member val X = x with get, set;; type Hoge = class new : x:int -> Hoge member X : int…
dplyrパッケージとmagrittrの組み合わせはいい感じだ。 dplyrパッケージで出来るだけデータフレームの状態でデータを捌いておいて magrittrパッケージの関数を使って、必要なところだけベクトル化して捌く というイメージだな。 magrittrパッケージのマニュ…
unique関数+by引数な感じで。 > a <- data.table(A=1:5,B=letters[1:10]) > a A B 1: 1 a 2: 2 b 3: 3 c 4: 4 d 5: 5 e 6: 1 f 7: 2 g 8: 3 h 9: 4 i 10: 5 j > duplicated(a, by="A") [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE > uniqu…
頭出し ネタが古い上に、C++に毒されているせいか、F#のOOP、つーかクラスの書き方がどうもしっくりこないので、まとめる。 七誌さんの F# - 七誌の開発Wiki がとても良かった。言い訳すると「えーマジクラス!?キモーイ。クラスが許されるのはC#までだよね…
type使えば型に別名付けれるのか。C++のtypedefっぽい。 以下は、float*floatなタプルを例に、そのデータ型に対する+演算子をオーバーロードしてベクトルの和を計算させてみるって簡単な話。 > type Vector2D<'a> = 'a*'a;; type Vector2D<'a> = 'a * 'a > l…
春ですね。最近はめっきりいろんなものの進化、早いですね。 例えばR界隈でいうと、データフレーム捌き用の高速処理ライブラリ「dplyr」の登場によって、 俺がおおよそ一年前に作ったplyrの資料がもう一年も経たずに役に立たなくなる。そういう進化の早い世…
鳥頭化がひどいのでメモっておこうって。 結論として function_traitsの特殊化で、「R_(Arg_)」と「R_(*)(Arg_)」は区別され、それはdecltype(hoge)なのかdecltype(&hoge)なのかに依る typeid関数に対しても&を付けてhoge関数を渡すか渡さないかで、void (__…
引数の型だけ違う関数オブジェクトの処理をtemplateで切り分ける−3 - My Life as a Mock Quant の続編。関数オブジェクトだけじゃなくて、関数でもOKにしてみた。ラムダ式でも動いた。関数ポインタが混ざってくると混乱する。 #include<iostream> #include<vector> #include<type_traits> /</type_traits></vector></iostream>…
Functionally option pricing by binomial tree - My Life as a Mock Quant で作成したツリー構造(完全二分木)だと、木の深さ/高さNに対して2^Nメモリ食うんでそれなんとかしたいぞと、 上記の例の場合、ノートの結合があるので、メモリ消費量は本来Nオー…
Introduction You may already know, there are their own implementation of option pricing codes by binomial tree model on the Web(see Reference) , and binomial tree method is no longer popular way to get a option price in Finance/Financial e…
すなおにこんなんでイケた。すぐ忘れるわぁ。Hogeにhoge関数でもMogeクラスのオブジェクトでもどっちでも入ると。 #include <iostream> template<class T_> struct Hoge { Hoge(const T_ & x) : x_(x){} double operator()(double x){return x_(x); } T_ x_; }; double hoge(doub</class></iostream>…