gpt4 book ai didi

ruby - 在 Ruby 中生成高斯(正态分布)随机数的代码

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:42 31 4
gpt4 key购买 nike

用 ruby​​ 生成正态分布随机数的代码是什么?

(注意:我回答了我自己的问题,但我会等几天再接受,看看是否有人有更好的答案。)

编辑:

为此,我查看了两次搜索产生的 SO 上的所有页面:

+“正态分布” ruby

+高斯+随机 ruby

最佳答案

Python 的 random.gauss()和 Boost 的 normal_distribution都使用 Box-Muller transform ,所以这对 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

该方法可以包装在一个类中,一个一个地返回样本。

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 (CC0)

在法律允许的范围内,antonakos已放弃 RandomGaussian Ruby 类的所有版权和相关或相邻权利。本作品发表于:丹麦。

关于ruby - 在 Ruby 中生成高斯(正态分布)随机数的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5825680/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com