2016-05-12 119 views
3

我偶然发现了这一点,试图从一些数据做一个随机偏差样本。似乎适合x^2的简单分布是我正在寻找的东西,但是这里有一个人造物,我不能完全包裹我的头。随机指数分布怪异

下面是一个for循环的代码片段,选择由x^2分布的数组中的索引,然后在该索引位置增加计数器。

package main 
import "time" 
import "fmt" 
import "math" 
import "math/rand" 

func main() { 
    rand.Seed(time.Now().UTC().UnixNano()) 

    var arr [10]int 

    for i := 0; i < 5000; i++ { 
    rnd := rand.Float64() 
    tmp := rnd * rnd * 9 

    index := int(math.Floor(tmp + .5)) 

    arr[index]++ 
    } 
    fmt.Printf("%v", arr) 
} 

无论界限或迭代次数,绘制图总是找出来这样的价值观,用noticable“滴”的结尾。

enter image description here

这是我很难理解。这些指标不应该一直适合曲线吗?

我怀疑有关四舍五入的东西,但我现在正在抓秸秆。

回答

1

首先,你的X-规模是一种误导,因为它从1开始,以10结尾。应该是0 ... 9。

考虑到它是固定的,你的分布是完全正确的,虽然也许没有打算(你实际上想要什么?)。

您首先有一个介于0和9之间的分布,包括两端在内。如果你添加0.5,然后下降,问自己有多少点击每个索引可以“获得”

:大多数索引得到“全套”与1和2(或图6和7,或者任何其他时间间隔)之间的十进制值,其被向下舍入到1(或6,或任何指数)

EXCEPT

边缘指标 0和9只得到一个 “半全套”。

因为你偏移量索引0 ... 1到0.5 ... 1.5和向下取整。这个范围中只有一半将保持索引= 0,即。值介于0之间。5和1(因为不再有0和0.5之间的任何值)。

和其他的一样。您将8 ... 9抵消到8.5 ... 9.5,然后向下取整。索引9仅获得1/2,即。值在9和9.5之间。

您的图表的左端实际上比您预期的要低,尽管它与右端没有区别。

这些数字确实有时令人惊讶:-)。

5

问题是你的分布范围[0,1],然后你乘以9,使范围[0,9],然后你加0.5,这使得范围[0.5,9.5] 。

不仅最后一个索引值有明显的下降,第一个索引值也有一个不明显的下降,因为每个桶只有一半填满。

你有没有考虑只需10,而不是9

tmp := rnd * rnd * 10 

然后乘以离开关在三楼+ 0.5?

index := int(math.Floor(tmp)) 

产生分布像你所期望的,这里有一个循环去到50几个结果:

[157949 65411 50239 42599 37637 33706 31200 28789 26927 25543] 
[158302 65533 49712 42480 37347 33882 30987 28696 27225 25836] 
[157824 65627 50432 42328 37307 33900 30787 29006 26975 25814] 
+0

直觉地板[0.5,9.5]的范围仍然是[0,9],但是对不对?这就是我想要的。绘制你的分布似乎反而在开始时有一个“跳跃”,而不是:[http://www.wolframalpha.com/input/?i=plot+%5B157949+65411+50239+42599+37637+33706+31200+28789+ 26927 + 25543%5D](http://www.wolframalpha.com/input/?i=plot+%5B157949+65411+50239+42599+37637+33706+31200+28789+26927+25543%5D) – rhardih