随机索引分布怪异

标签 random go statistics

我偶然发现了这一点,试图从一些数据中进行随机偏差样本。看来我正在寻找适合 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)
}

无论边界或迭代次数如何,绘制值的图形总是看起来像这样,最后有明显的“下降”。

enter image description here

这是我难以理解的。索引不应该完全符合曲线吗?

我怀疑与四舍五入有关的事情,但我现在正在捕获救命稻草。

最佳答案

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

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

您是否考虑过简单地乘以 10 而不是 9

tmp := rnd * rnd * 10

然后在你的楼层中留下+ 0.5?

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

这会产生如您所期望的分布,以下是循环达到 500,000 的一些结果:

[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]

关于随机索引分布怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37196340/

相关文章:

statistics - 为什么 Julia Distribution 包不能使用整数?

php - 从 mySQL 数据库显示单个值的更有效方法?

java - DnD 骰子滚轴

matlab - 在 Matlab 中选择统计随机数据集进行协同训练的正确方法

json - 有什么办法可以从Go中的给定JSON中提取JSON模式? [复制]

git - 如何设置 GoReleaser 将 brew tap 推送到不同的存储库

string - 将多行 SQL 查询导入到单个字符串

r - 为什么 'load()' 函数后的随机状态相同

Python:如何修复绘制的 "random"值函数调用是否一致?

mongodb - 由于缺少 'ISODate',使用时间时 Golang + mgo 查询 mongodb 失败