我需要的意思是2,从1开始到10,000个随机数。如何使用分配gem在Ruby中创建指数分布?
require 'distribution'
mean = 2
# generate a rng with exponential distribution
rng = Distribution::Exponential.rng(mean)
我需要的意思是2,从1开始到10,000个随机数。如何使用分配gem在Ruby中创建指数分布?
require 'distribution'
mean = 2
# generate a rng with exponential distribution
rng = Distribution::Exponential.rng(mean)
嗯,我没有太大的统计学家的,所以我有点在这里代码丢失。
那么你能告诉我是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之间的值。希望这有助于:)
PRINT每个值:
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.
感谢这有助于。我将如何打印所有1000个值? – 2014-10-09 15:02:04
你为什么输入0.5? – 2014-10-09 15:11:46
那么,正如我所说,我不是一个数学家伙 - 我相对容易理解数学概念,但根本不追求它。无论如何,我不确定为什么0.5似乎给你的意思是2.我做的是开始尝试不同的价值观。我注意到通过代码,那里的价值通常在0和1之间。 然后,我刚开始尝试0.1,0.2等。在0.5上运行,并注意到它似乎产生了您所期望的结果。 看我的编辑打印每个值。 :) – 2014-10-09 19:26:15
你是什么意思?你刚刚做到了?您的代码会创建一个随机数字生成器,用于生成速率参数为0.5的指数分布的数字。 – Max 2014-10-09 04:52:21
如果你不知道,你不需要一个宝石来生成指数随机变量:'-mean * Math.log(rand)'。 – 2014-10-09 06:14:16