如何使用分发gem在Ruby中创建指数分布?

时间:2014-10-09 03:23:41

标签: ruby rubygems

我需要将均值设为2,从1到10,000随机数开始。

require 'distribution'

mean = 2

# generate a rng with exponential distribution
rng = Distribution::Exponential.rng(mean)

1 个答案:

答案 0 :(得分:1)

好吧,我不是一个统计学家,所以我在这里的代码中有点迷失。

那么,你能告诉我,rng(它被命名为l)的第一个参数应该代表“限制”吗?

如果是这样,我真的不知道,我得到了你必须得到的同样结果,但同样,我不是统计学家,甚至不是数学家,我只是喜欢编码,所以我我可能没有太大的帮助。

编辑:所以,再一次,我真的不知道发生了什么或应该在这里发生什么。这里给出了一个相对接近2的平均值(我只是通过弄乱l值得到了这个):

require 'distribution'
rng=Distribution::Exponential.rng(0.5)
sum=0
1000.times { sum += rng.call }
sum /= 1000
puts sum

似乎给出的值一般在1.9到2.1之间。希望这会有所帮助:)

打印每个值:

require 'distribution'
rng = Distribution::Exponential.rng(0.5)
values = [] # we'll store each value in an array

# calculate the results
how_many = 1000 # let's store 1000 in a variable since we'll reuse the value
how_many.times { values << rng.call } # rng is now a Proc, so we use call to get our value

# print out the results
values.each_with_index { |v,i| puts "#{i+1}: #{v}" } # print each value one by one
puts
puts "Total sum: #{values.inject(&:+)}"
puts "Mean: #{values.inject(&:+)/how_many}"

同样,不确定这是不是“正确”或者你正在寻找什么,但它肯定接近2.尝试一个大于1000的数字,比如100000。