2014-01-01から1年間の記事一覧

負の数を書く時は、-と1の間にスペース入れる癖つけといた方がよさげ

F#

> 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 -…

パターン・マッチに計算式入れちゃいかん

F#

掲題の件、そういうことです。はじめ 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)は、状態空間モデルの状態変数の系列を観測値の系列 のみから推定するアルゴリズム パッケージを使ってもいいんだど、お勉強も兼ねて自分でコード書いてみ…

ブラウン橋(Brownian bridge)作りたい

簡単なんだけど、やってなかったなって。ブラウン橋言ってる人もいるし、ブラウニアン橋いってる人もいてどっちが正しいのかわかんねぇけど、ここではブラウン橋でいく。ブラウン橋は、を標準ブラウン運動として と書かれる確率過程だと思っておけばいい。こ…

配列(array)の書き方がよくわからんかったのでメモ

R

行列でもたまに混乱するのに、更に次元が上がった多次元配列になんてなるともう???ってなる低能です。もちろん、配列を使うのではなくて、"行列を要素に持つリスト"を使うのも手かとは思いますが、arrayの方が便利そうだったので、行列を一次元だけあげた…

AR(1)モデルのメモ

今更感あるが、諸事情によりメモ。やりたいことは(定常性を仮定した)AR(1)モデルの自己相関係数がちゃんと理論値と一致するのかを見たいって話。 AR(1)モデルとは AR(1)は、適当な確率過程 が、 に従うようなモデル。ここで、 は独立な平均0、標準偏差の正規…

適当なクラスにある特定のメンバーがあるかないかで処理を切り分ける

C++

c++ - Check if a class has a member function of a given signature - Stack Overflow に習う感じでやるのがよいか。SFINAE〜って奴です。 ここではToStringというintを引数にとってstd::stringを返すメンバーが任意のクラスにあるかないかで処理を切り分…

F# interactive(fsi.exe)で起動時に自動的にライブラリを読み込む

F#

コンソールでちゃっとF#をエンジョイしたい、そんな時、あると思います。 ただ、同時にMathNet.Numericsなんかのライブラリを参照したい時、いちいち読み込むのがめんどいので、そいつを自動化しようという話。使いそうなライブラリは全部 C:\FsLib に突っ込…

多次元配列を操作する際、深いネスト作ってループすんのやめたい

R F#

高次元の配列に対する処理を書こうと思うと、その各次元に対応したループインデックスに対するfor分のネストがえらいことになる、そんな時あると思います。 F#でやるならどうしようかと考えて以下のようなコードを書いた。List.collectが便利ってことに気が…

数値→文字列の変換はto_string関数で一発だ in C++11

C++

C++での「数値→文字列」の変換。 昔はstringstreamを使って数行コードを書いて変換しなきゃならんかったもんが、C++11だとto_string関数一発でいけるようになっていた。進化するC++ありがたい。 #include <iostream> #include <string> int main() { const std::string x = std</string></iostream>…

Rで,長さ100の数列があって,連続する5個の数の和を全て(96個)欲しいとき,どうすれば賢いかな

R F#

リアル・マネーボール界隈では超有名で、知らない人はもぐりと言われるブログである 300億円欲しい の著者@gg_hatano氏がRで, 長さ100の数列があって, 連続する5個の数の和を全て(96個)欲しいとき, どうすれば賢いかな— はたむ (@gg_hatano) 2014, 4月 28な…

ファイルにデータ(Seq系)を保存したい

F#

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 …

F#でいろんな乱数を作りたい

F#

掲題の件、System.Randomを使うと言うという手もありますが、やはり一様乱数だけだと不便なので、統計系に強いライブラリの助けを借りて作業したい、そういうことです。 それにはMath.NET Numerics Math.NET Numerics を使うと良い。とりあえず、NuGetなりで…

2次元配列からある特定の行/列のみを抽出する場合にはアスタリスク「*」を使う

F#

多次元配列もそうなんだろうけど、「*」を使うことによって、行列のある行・列を抽出することができるぞと。 さらに例えば「1..1」と書くか「1」と書くかで、返却が一次元配列になるか二次元配列になるかをコントロールすることができる。 > let x = Array2D…

何もしなくても、クラスのメソッドと通常の関数が同じように扱える

F#

クラスのメソッドだろうが、関数だろうがそこんとこ区別しないいF#さん素敵ですという話。 以下の例は、Hogeクラスのメソッド(func)を、関数gを引数に取る関数fに対して、hoge.funcを突っ込んでもちゃんと動くぞという確認。 > type Hoge() = member this.fu…

計算終了を音で伝える

R

長い計算(シミュレーション)を、遅い遅いと言われているR上で走らせるととんでもない時間がかかる。 なので「ご飯の用意をしつつ計算させておいて、その計算が終わったらまた別な計算を行いたい」みたいな状況だと、 計算の終了を音で知らせてアナウンスして…

F#では数値に対して"単位"を設定できるので、計算ミスが減るのです

F#

"長さ(m or km etc)"やら"時間(s or hour etc)"などの単位が絡んだ計算、特に金融なんかだと為替レートが絡んだ計算で、かけ算すべきなのか割り算すべきなのかよく間違えますよね?そんな貴方にお勧めしたいF#です。以下、ドル円レートの変換を計算するとい…

日中足のデータをxts型に倒す

R

むかーしに書いた記事 xtsへのコンバート - My Life as a Mock Quant のやり方「as.xts(read.zoo(hoge))」だと、日中足のデータが正しく読めねぇよ!Rでの日中足の扱いはググっても情報が少ない。昨夜のも日足データなら、 y<-as.xts(zoo(x)) だけでおk(by …

クリップボードからのデータ整形あるある

F#

たとえばExcel上に行列っぽく固まっているデータ を、チャっとCtrl+Cでコピッて、CSVファイルっぽくしたいな、そういう時はF#の出番です。 コピーした状態で以下のコードを実行すればよい。 > open System.Windows.Forms;; > Clipboard.GetText().Split('\r'…

クラス/レコードのオブジェクトを別な変数でlet束縛した時、これは値じゃなくて参照です

F#

F#で適当なクラスのオブジェクトを作って、それを他の変数にlet束縛しても、それは値の丸コピーではなくて、参照になるとそういうことです。 > type Hoge(x:int)= - member val X = x with get, set;; type Hoge = class new : x:int -> Hoge member X : int…

magrittrがいい感じ

R

dplyrパッケージとmagrittrの組み合わせはいい感じだ。 dplyrパッケージで出来るだけデータフレームの状態でデータを捌いておいて magrittrパッケージの関数を使って、必要なところだけベクトル化して捌く というイメージだな。 magrittrパッケージのマニュ…

data.tableからの重複除去

R

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…

実はF#のオブジェクト指向ってしっくりこないんです!

F#

頭出し ネタが古い上に、C++に毒されているせいか、F#のOOP、つーかクラスの書き方がどうもしっくりこないので、まとめる。 七誌さんの F# - 七誌の開発Wiki がとても良かった。言い訳すると「えーマジクラス!?キモーイ。クラスが許されるのはC#までだよね…

typeで型に別名を付ける

F#

type使えば型に別名付けれるのか。C++のtypedefっぽい。 以下は、float*floatなタプルを例に、そのデータ型に対する+演算子をオーバーロードしてベクトルの和を計算させてみるって簡単な話。 > type Vector2D<'a> = 'a*'a;; type Vector2D<'a> = 'a * 'a > l…

気が付いたらRがF#になる日が来るのかもしれない、そんなことを考えていました

R F#

春ですね。最近はめっきりいろんなものの進化、早いですね。 例えばR界隈でいうと、データフレーム捌き用の高速処理ライブラリ「dplyr」の登場によって、 俺がおおよそ一年前に作ったplyrの資料がもう一年も経たずに役に立たなくなる。そういう進化の早い世…

関数ポインタ、あるいはそれをテンプレートの特殊化で捌く時用のメモ

C++

鳥頭化がひどいのでメモっておこうって。 結論として function_traitsの特殊化で、「R_(Arg_)」と「R_(*)(Arg_)」は区別され、それはdecltype(hoge)なのかdecltype(&hoge)なのかに依る typeid関数に対しても&を付けてhoge関数を渡すか渡さないかで、void (__…

引数の型だけ違う(関数オブジェクト|関数)の処理をtemplateで切り分ける

C++

引数の型だけ違う関数オブジェクトの処理をtemplateで切り分ける−3 - My Life as a Mock Quant の続編。関数オブジェクトだけじゃなくて、関数でもOKにしてみた。ラムダ式でも動いた。関数ポインタが混ざってくると混乱する。 #include<iostream> #include<vector> #include<type_traits> /</type_traits></vector></iostream>…

ツリー構造を作る時のメモリを減らしたい

F#

Functionally option pricing by binomial tree - My Life as a Mock Quant で作成したツリー構造(完全二分木)だと、木の深さ/高さNに対して2^Nメモリ食うんでそれなんとかしたいぞと、 上記の例の場合、ノートの結合があるので、メモリ消費量は本来Nオー…

Functionally option pricing by binomial tree

F#

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…

関数ポインタと関数オブジェクト(ファンクタ)のどちらでも保有できるクラス

C++

すなおにこんなんでイケた。すぐ忘れるわぁ。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>…