Random 随机指数分布奇异性
我偶然发现了这一点,试图从一些数据中随机抽取有偏差的样本。我正在寻找一个适合x^2的简单分布,但这里有一个人工制品,我无法完全理解 下面是一个for循环的片段,该循环在x^2分布的数组中选择一个索引,然后在该索引位置递增计数器Random 随机指数分布奇异性,random,go,statistics,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
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)
}
主程序包
导入“时间”
输入“fmt”
导入“数学”
导入“数学/兰德”
func main(){
rand.Seed(time.Now().UTC().UnixNano())
var arr[10]int
对于i:=0;i<5000;i++{
rnd:=rand.Float64()
tmp:=rnd*rnd*9
索引:=int(数学层(tmp+.5))
arr[索引]++
}
格式打印F(“%v”,arr)
}
无论边界或迭代次数如何,绘制值时,图形总是这样显示,最后出现一个明显的“下降”
这就是我难以理解的。难道这些指数不应该完全符合曲线吗
我怀疑与四舍五入有关的东西,但我现在正在抓救命稻草。问题是你的分布有[0,1]的范围,然后乘以9,得到[0,9],再加上0.5,得到[0.5,9.5]的范围 不仅最后一个索引值有明显的下降,而且第一个索引值也有不明显的下降,因为每个桶只装满了一半 你考虑过简单地乘以10而不是9吗
tmp := rnd * rnd * 10
然后在你的地板上去掉+0.5
index := int(math.Floor(tmp))
这将产生一个如您所期望的分布,下面是循环到500000的一些结果:
[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]
首先,你的X标度有误导性,因为它从1开始,以10结束。应该是0…9 考虑到它是固定的,您的分布是完全正确的,尽管可能不是有意的(您实际上想要什么?) 首先,分布在0和9之间(包括0和9)。如果你加上0.5,然后四舍五入,问问自己每个索引可以实际“获得”多少点击次数 A:大多数索引获得一个“完整集”,其十进制值介于1和2之间(或6和7之间,或任何其他间隔),四舍五入为1(或6,或任何索引) 除 边缘索引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之间 图表的左端实际上比你预期的要低,尽管它不像右端那么容易辨别
这些数字有时确实令人惊讶:-)。直观地说,[0.5,9.5]的范围仍然是[0,9],对吗?这就是我想要的。相反,绘制分布图似乎在开始时有一个“跳跃”: