2014-10-09 33 views
0

我需要的意思是2,从1开始到10,000个随机数。如何使用分配gem在Ruby中创建指数分布?

require 'distribution' 

mean = 2 

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

你是什么意思?你刚刚做到了?您的代码会创建一个随机数字生成器,用于生成速率参数为0.5的指数分布的数字。 – Max 2014-10-09 04:52:21

+1

如果你不知道,你不需要一个宝石来生成指数随机变量:'-mean * Math.log(rand)'。 – 2014-10-09 06:14:16

回答

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之间的值。希望这有助于:)

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.

+0

感谢这有助于。我将如何打印所有1000个值? – 2014-10-09 15:02:04

+0

你为什么输入0.5? – 2014-10-09 15:11:46

+1

那么,正如我所说,我不是一个数学家伙 - 我相对容易理解数学概念,但根本不追求它。无论如何,我不确定为什么0.5似乎给你的意思是2.我做的是开始尝试不同的价值观。我注意到通过代码,那里的价值通常在0和1之间。 然后,我刚开始尝试0.1,0.2等。在0.5上运行,并注意到它似乎产生了您所期望的结果。 看我的编辑打印每个值。 :) – 2014-10-09 19:26:15

相关问题