gpt4 book ai didi

随机索引分布怪异

转载 作者:IT王子 更新时间:2023-10-29 01:26:53 26 4
gpt4 key购买 nike

我无意中发现了这一点,试图从一些数据中随机抽样。我正在寻找适合 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

然后在 Floor 中去掉 + 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com