1. michihito_t

    No comment

    michihito_t
Changes in body
Source | HTML | Preview
@@ -1,55 +1,56 @@
第4章に正規(ガウス)分布の乱数を生成するコードが有る。
## 擬似的に正規分布の乱数を最も簡単に作る方法
-0.5~0.5の乱数の12回の平均。
```ruby
def norm_rand
random = Random.new()
result = 0
12.times do
result += random.rand(-0.5..0.5)
end
result / 12
end
```
とはいえ、色々面倒だし、これを使って行列を作るのもなんとも不便。
そこで、乱数を生成してくれるライブラリ、Numo::GSLを導入する。
## Numo::GSLの導入
基本的にはDockerのRuby上で行っています。
環境構築に関しては、[敢えてRubyで学ぶ「ゼロから作るDeep Learning」Docker環境構築編](https://qiita.com/michihito_t/items/02e5056764de6d2b7655)をご確認ください。
```sh
# まずは元となるGSLを導入
$ apt install -y gsl-bin
# 次にNumo::GSLのgemを導入
$ gem install numo-gsl
```
## Numo::GSLでの正規乱数の生成
```ruby
require 'numo/gsl'
require 'numo/narray'
## 標準正規分布のrow * colの行列を作る
def randn(row, col)
r = Numo::GSL::Rng::Rand.new
r.gaussian(1, row * col).reshape(row, col)
end
```
## 追記 Numo::Narrayから正規乱数の生成
@kojix2 さんよりコメント頂きました、Numo::NArrayで正規乱数を作る方法も記載しておきます。
```ruby
require 'numo/narray'
-## 標準正規分布のrow * colの行列を作る
-Numo::DFloat.new(row,col).rand_norm(0,1)
+# 標準正規分布のrow * colの行列を作る
+# rand_norm = rand_norm(0,1) 平均0、標準偏差1の標準正規分布
+Numo::DFloat.new(row,col).rand_norm
```