F#

F#の配列(Array)を辞書(Dictionary)のキーにしちゃいかん!!代わりにタプル(tuple)を使おう

F#

すごいハマった。 let dic = new System.Collections.Generic.Dictionary<int option [], string>() dic.[[|Some 1; Some 1|]] <- "A" dic.[[|Some 1; Some 2|]] <- "B" dic.[[|Some 1; Some 3|]] <- "C" というコードをを実行しても System.Collections.Generic.KeyNotFoundExcepti</int>…

Enumの全要素をゲッツしたい

F#

こういうEnumがあったとする。 type Direction = | Up = 0 | Right = 1 | Down = 2 | Left = 3 その要素を全ゲッツしたければ System.Enum.GetValues(typeof<Direction>) とすればよい。System.Enumを叩けば、Enum周りのものはだいたい出てくると覚えよう。これも.NETの</direction>…

やってみよう分析!F#で強化学習(Q-learning, ε-greedy行動選択)

やってみよう分析!Rで強化学習(Q-learning, ε-greedy行動選択) - My Life as a Mock Quant やってみよう分析!おまけ 2 - 1: Excel VBAで強化学習(Q-learning, ε-greedy / softmax 行動選択) のF#実装版。強化学習自体の解説は上の記事読んどいたらいい。…

F#におけるenumの扱い方とその変換(キャスト)

F#

F#でのenumの書き方がよくわからなかったんでメモ。基本、判別共有体と同様の書き方をするもんだと理解すればよい。特に、intならenum関数で指定したenumへキャストできるけど、そうじゃなかったらLanguagePrimitives.EnumOfValueを使う点がミソ。 //AB enum…

やまかつ氏の滑り続ける<del>リプライへの統計的考察、及びその実装 -Deedleを添えて- </del>タイムライン取得

F#

はじめに こういう話があった。ふと思ったんだけど、俺へのリプライって、半分ぐらいが「ごちそうさまです」な気がする。— やまかつ (@yamakatu) 2015, 1月 5これをF#を使って確かめようといろいろ調べていたら、とりあえず GitHub - fsprojects/FSharp.Data…

andってのはクラス定義の循環参照に使うのか

F#

クラス間の循環参照、C++だと前方宣言してごまかすようなところを、F#ではandを使ってクラスの定義をつなげることで対応するらしい。全然使わないから人様のコード読んでも???だったわ。以下の例は循環参照はしてないけどandでクラス定義をつないだ例。 t…

DeedleとAccord.NETを使ってサポートベクトルマシン(Support Vector Machine, SVM)を実行する

F#

意外とサクっと出来るんじゃないかと思ったが、そうもいかなかった。とりあえずの元データはirisでこれは適当にcsv形式で保存しておいた。とりあえずCross Validation&可視化はなしで予測値をはじき出すまでで結構苦労したのでまとめる。使っているのはAcco…

F#でスクリプト書くときは、とりあえずこれをスクリプトの頭にいれておけ

F#

これがないとライブラリの読み込みがメンドイんだ… System.Environment.CurrentDirectory <- __SOURCE_DIRECTORY__ 内容はカレントディレクトリをスクリプトのフォルダへと移動するって話。

FsLab JournalでReproducible Research(レポート)を簡単に作りたい

F#

はじめに この記事は F# Advent Calendar 2014 - connpass の17日目の記事です。前日はpocketberserkerさんのFsAttoparsecについて - pocketberserkerの爆走でした。今日は最近流行り?のリプロデューシブル・リサーチというか、クヌースのいう文芸的プログ…

今日も1日がんばるぞい!

F#

こういう話がある 今日も1日がんばるぞい! これをF#でやりたい。 open System let dic = [ [|"今日"; "ぞい"|]; [|"も"|]; [|"1"; "ぞい"|]; [|"日"; "ぞい"|]; [|"がん"; "ぞい"|]; [|"ばる"; "ぞい"|]; [|"ぞい!"|]] let rnd = new System.Random() let …

ImageMagickで画像ファイルのトリミングをしたい

F#

ImageMagickで、結構な数の画像をトリミングしようと思ってF#でスクリプトを書いた。F#の文字列内で"(ダブルクオテーション)を使うためには@" "" "みたいに @を使う "(ダブルクオテーション)は重ねて書く ってのに気がつかなくてハマったのでメモ。 //imagem…

IfSharp (notebook)サイコオオオオオオオオオオオオオオオオオオオオオオオオオ

F#

はじめに IPython notebook、昔々触ったときは「コンセプトは良いけどまだまだですナ。ハハハ」みたいな感じで流してたのだが、今ここでちゃんと触ってみようとおもったけれども、最近scikit-learnを必要に応じて触るくらいでpythonあまりいじってないし、俺…

F#でプレゼンテーション/スライドを作りたい

F#

ぼけーっとFSharpのハッシュタグを眺めていたらFsRevealというプロジェクトがあることを知った。Introducing FsReveal – Beautiful, version controlled presentations in the browser http://t.co/fJnjsYHWkb #fsharp— F# Reddit (@reddit_fsharp) 2014, 11…

tupleの値をseqenceで取得したい

F#

Microsoft.FSharp.Reflection Namespace (F#) 動的に型情報などを持ってくるReflectionを使えばいいのか。 open Microsoft.FSharp.Reflection let x = (1,2,3,4,5) FSharpValue.GetTupleFields x |> Array.iter (fun z -> printfn "%d" (unbox<int> z))</int>

CのDLLをF#から呼びたい俺が辿った軌跡

F#

はじめに Cで作ったDLLをF#から呼び出す方法を探していたら、どうもplatform invokeだのmarshallingだのを気にしないとだめらしい。C#を使わない俺はその辺よくわかってないんだが、F#でやっている例として How to: Call Native Libraries from F# | Microso…

継続渡し(Continuation-passing style)の末尾再帰

F#

継続渡しスタイル - Wikipedia 末尾再帰 - Wikipedia ここらに書いてるのはこういうことだろうという。以下はリストの中の最大値を求めるコード。 let maximum xs = let rec maximum proc xs = match xs with | [] -> failwith "List is empty!!!" | x::[] -…

ArrayのArrayをコピーする時、「こいつぁ…Shallow copyの匂いがするぜぇ…?」と疑うこと

F#

普通に配列をDeep copyしたいならArray.copyで良いわけです。以下のコードを見る限りちゃんと、xとyが違う配列の実体を持っていそうだぞとわかる。 > let x = [|1..5|];; val x : int [] = [|1; 2; 3; 4; 5|] > let y = Array.copy x;; val y : int [] = [|1…

不純な時はList(not list)使うのか

F#

不純野郎ですまない。値を束縛後にガンガン突っ込みたいときは、F#でなく.NETが提供しているList(not list)を使うとよいってことだ。 open System.Collections.Generic let x = List<int>() [1..10] |> List.iter (fun i -> x.Add i) x |> Seq.iter (fun z -> pri</int>…

tupleは関数の引数でもバラして受け取れるのが素晴らしい

F#

以下のようにローカル変数に対して、バラして受け取れるのは知っていたが、 > let a,b = (100, 123);; val b : int = 123 val a : int = 100 関数の引数に対してもこういう書き方していいのか。 > [(1,1);(3,3)] |> List.reduce (fun (x1, x2) (y1,y2) -> (x…

負の数を書く時は、-と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 | (…

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

F#

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

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

R F#

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

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…

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

F#

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

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

F#

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