Rai*_*mer 32 javascript random math statistics
我写了一段简单的代码来比较随机数组的差异,发现了一些我不太了解的东西。
我本来希望结果是接近0.5的随机数,但实际上是0.3333。
为什么随机数数组位于0.3而不是0.5上?
const result = document.getElementById('result');
const generateRandomNrArray = (nrNumbers) => {
let i;
let result = [];
for (i = 0; i < nrNumbers; i++) {
result.push(Math.random());
}
return result;
}
const getArrayDiff = (arr1, arr2) => {
var diff = 0;
arr1.forEach(function (v1, index) {
diff += Math.abs(v1 - arr2[index]);
});
return diff;
}
const run = (nr) => {
const arr1 = generateRandomNrArray(nr);
const arr2 = generateRandomNrArray(nr);
const totalDiff = getArrayDiff(arr1, arr2);
result.innerHTML = "Average difference:" + (totalDiff / nr);
}
Run Code Online (Sandbox Code Playgroud)
button {font-size: 2em;}
Run Code Online (Sandbox Code Playgroud)
<div id="result"></div>
<button id="run" onclick="run(1500)">Click Me</button>
Run Code Online (Sandbox Code Playgroud)
Mar*_*yer 29
这基本上可以归结为一个极限,这是有道理的。考虑0到10之间的数字组合,并计算可以产生的各种差异。
例如,存在一种组合,其相差9-(0,9)。有5个,相差5:
[0, 5],
[1, 6],
[2, 7],
[3, 8],
[4, 9]
Run Code Online (Sandbox Code Playgroud)
但是有九种组合,其差为1:
[1, 2],
[2, 3],
...
[8, 9]
Run Code Online (Sandbox Code Playgroud)
使用0-10时,计数为:
{1: 9, 2: 8, 3: 7, 4: 6, 5: 5, 6: 4, 7: 3, 8: 2, 9: 1}
Run Code Online (Sandbox Code Playgroud)
有45个组合,而这些组合的平均差异3.6666
并不是5
因为差异较小而不是较大的差异。
当您将粒度从0-10增加到0-100时,将保持相同的模式。共有99个组合,结果相差1,只有50个,相差50,平均值为33.6666
。
当您增加相反方向的有效位数时,在相反的方向上以0和1之间的越来越细的划分,您会发现与极限逼近相同的过程1/3
。将平均差异拉低的差异要比较大的差异小得多。对于 0-1
0.1的间隔,您会看到9的差异为0.1,5的差异为0.5,在0.01时,将有99的差异为0.01,而50的差异为0.5。当间隔接近0时,差的平均值接近1/3
。
S. *_*ica 22
(事实上,您并不是在看差异,而是在看您的随机数之间的绝对差异。这是有差异的。(对双关语)
如果您有两个独立的均匀分布的随机变量X, Y ~ U[0,1]
,则它们的绝对差|X-Y|
将遵循期望值为1/3 的三角分布。一切都应有。这种分布结果以及计算期望值,是概率论中相当标准的作业问题。直觉直接遵循马克的论点。
这是绝对和非绝对差异的直方图。在左侧,您会看到对于较小的绝对差而言如何有更大的质量,从而使期望值下降。
R代码:
set.seed(1)
xx <- runif(1e5)
yy <- runif(1e5)
par(mfrow=c(1,2))
hist(abs(xx-yy),main="|X-Y|",col="grey",xlab="")
hist(xx-yy,main="X-Y",col="grey",xlab="")
Run Code Online (Sandbox Code Playgroud)
(顺便说一下,如果您有概率/统计问题,我们的姐妹网站CrossValidated是一个很好的资源。)
归档时间: |
|
查看次数: |
2010 次 |
最近记录: |