是比较容易分析明白你的问题,如果不是均匀随机数,我们使用标准的正常数字和定性结果可以应用到你的具体情况:现在
>>> a = np.random.normal(0, 1, size=(5, 5, 5, 3))
>>> s = a.sum(axis=(0, 1, 2))
所以这三个项目的s
是125个数字的总和,每个数字都来自标准正态分布。这是一个公认的事实,即将两个正态分布相加给出另一个正态分布,其平均值是平均值的总和,方差是方差之和。因此s
中的三个值中的每一个将作为均值为0且标准偏差为sqrt(125)= 11.18的正态分布的随机样本分布。
分布方差增长的事实意味着,即使您多次运行您的代码,您也会看到每个数字的平均值为0,在任何给定的运行中,您更可能看到更大的偏移量从0.
此外,你然后去计算这三个值的标准。将三个标准正态分布平方并将它们加在一起给你一个chi-squared distribution。如果你然后取平方根,你得到chi distribution。前者是比较容易处理,并预测你的三个值的范数的平方的平均值为3 * 125。它肯定似乎是:
>>> mean_norm_sq = 0
>>> for n in xrange(1000):
... a = np.random.normal(0, 1, size=(5, 5, 5, 3))
... s = a.sum(axis=(0, 1, 2))
... mean_norm_sq += np.sum(s**2)
...
>>> mean_norm_sq/1000
374.47629802482447
首先尝试一个更简单的情况下, ,例如[[2,4,6,8]]中的[abs((np.random.random(10 ** i)-0.5).sum())的线性情况。你能看到发生了什么事吗? – DSM
那么,它不是总结,而是我的测试案例? (-0.5,0.5)上的一组N个随机数不等于0,因为N - > inf?为什么不?而且,如果我的测试无效,我的总结是否正确? – chadh
您正在计算所得总和向量的大小,使用实数时量值总是正数。参见[wiki页面](http://en.wikipedia.org/wiki/Norm_(数学))。我想你想在[1,2,3,4]]'中使用类似'[(np.random.rand(10 ** N)-0.5).sum()/ 10 ** N的东西来看看相对偏差的收敛。 – Daniel