[解決済み] Rubyでガウス(正規分布)乱数を生成するコード
2022-02-24 18:38:59
質問
Rubyで正規分布に基づく乱数を生成するコードを教えてください。
(注:自分自身の質問には答えましたが、誰かがより良い答えを持っているかどうか、受け入れる前に数日待ってみます)
EDITです。
これを検索して、2つの検索の結果得られたSOの全ページを見ました。
+正規分布ルビー
と
+ガウシアン +ランダムルビー
解決方法は?
Pythonの ランダム.ガウス() とBoostの 正規分布 はどちらも ボックスミュラー変換 ということで、Rubyでも十分なはずです。
def gaussian(mean, stddev, rand)
theta = 2 * Math::PI * rand.call
rho = Math.sqrt(-2 * Math.log(1 - rand.call))
scale = stddev * rho
x = mean + scale * Math.cos(theta)
y = mean + scale * Math.sin(theta)
return x, y
end
このメソッドは、サンプルを1つずつ返すクラスでラップすることができます。
class RandomGaussian
def initialize(mean, stddev, rand_helper = lambda { Kernel.rand })
@rand_helper = rand_helper
@mean = mean
@stddev = stddev
@valid = false
@next = 0
end
def rand
if @valid then
@valid = false
return @next
else
@valid = true
x, y = self.class.gaussian(@mean, @stddev, @rand_helper)
@next = y
return x
end
end
private
def self.gaussian(mean, stddev, rand)
theta = 2 * Math::PI * rand.call
rho = Math.sqrt(-2 * Math.log(1 - rand.call))
scale = stddev * rho
x = mean + scale * Math.cos(theta)
y = mean + scale * Math.sin(theta)
return x, y
end
end
<イグ (CC0)
法律で定められた可能な範囲内で
アントナコス
に対するすべての著作権および関連・著作隣接権を放棄しています。
RandomGaussian
Rubyクラス。この作品は、デンマークから出版されています。
関連
-
[解決済み] Rubyでランダムな文字列を生成する方法
-
[解決済み] Rubyでガウス(正規分布)乱数を生成するコード
-
[解決済み] JavaScriptでランダムな文字列/文字を生成する
-
[解決済み] JavaScriptで特定の範囲のランダムな整数を生成する?
-
[解決済み] 乱数(int)を生成する方法を教えてください。
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] 英数字のランダムな文字列を生成する方法
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] 0から9までのランダムな整数を生成する
-
[解決済み] ランダムな英数字の文字列を生成するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】StringからIntegerへの暗黙の変換がない(TypeError)?
-
[解決済み】RVMをアンインストールする方法は?[重複] RVMのアンインストール方法
-
[解決済み] Rubyのメソッド'to_sym'は何をするのですか?
-
[解決済み] -bashです。/Users/myname/.bash_profile: パーミッションが拒否されました
-
[解決済み] RMagickのインストール。MagickWand.hが見当たりません。
-
[解決済み] Ruby の .reject! と .delete_if の比較
-
[解決済み] nil から String への暗黙の変換ができないエラー
-
[解決済み] 文字列の文字をアルファベット順に並べるには?
-
[解決済み] Rubyで=~と/Θはどういう意味ですか?
-
[解決済み] Rubyでリフレクション?