細々とした話ばかりになってしまうのでなんとも書きづらいが、ようやくRustの基本的文法で詰まってその日の分が終わる、みたいなことがなくなって進捗が出てきた。「詳解」の本は2.3節がようやく終わった(長かった・・・)。

ガウス分布の累積分布関数を計算してプロットする、みたいなことをしようとしたときに面白いcrateを見つけた。statrsというらしい。

statrs - Rust

各種分布が定義されていて便利そうだった。パッとドキュメントを見た感じだとpdfを計算するtraitはあったがなぜかcdfを計算するメソッドは入っていなさそうだったので自分で調べて実装した。ガウス分布のCDFは

$$ \frac{1}{2}\left(1 + \mathrm{erf}(\frac{x-\mu}{\sqrt{2\sigma^2}})\right) $$

と計算するらしい。実はこのerf(error function)を計算するために実装を探していてstatrsを見つけた、という流れだ。erfはstatrs::function::erf::erfにある。

iteratorの扱いにもなんとなく慣れてきた。確率分布から1000回サンプルして値を記録する、みたいなことをやろうとしたときにPythonだと

sampled = []
for i in range(1000):
	sampled.append(dist.sample())

みたいにするかもしれないが(そもそもnumpyを使う気がするが・・・)、Rustだと

(0..1000).map(|_x| dist.sample()).collect::<Vec<f64>>();

の方が良さそうな感じがある(mapではなくてfor_eachとかの方がいいのかな?)