因此,即使在由于有限的机器精度而没有误差的情况下,如果从高斯分布中采样的有限个点的数目给出精确的零均值,在数学上也是错误的。要做到这一点,我们确实需要无穷多的点数。
尽管如此,我还是手动地(以一种特殊的方式)试图将分布集中,使平均值为零。对于这个问题,我首先生成一个高斯分布,找出它的平均值,然后用这个平均值移动每个点。通过这样做,我的平均值非常接近于零,但随后我遇到了一个接近机器精度的小值(阶数为10**(-17)
),而且我不知道如何使其精确为零。
下面是我使用的代码:
import numpy as np
n=10000
X=np.random.normal(0,1,size=(2,n))[0,:]
Xm=np.mean(X)
print("Xm = ", Xm)
Y=np.random.normal(0,1,size=(2,n))[1,:]
Ym=np.mean(Ym)
print("Ym = ", Y)
for i in range(len(X)):
X[i]=X[i]-Xm
Y[i]=Y[i]-Ym
new_X=np.mean(X)
new_Y=np.mean(Y)
print(new_X)
print(new_Y)
Output:
Zreli = 0.002713682499601005
Preli = -0.0011499576497770079
-3.552713678800501e-18
2.2026824808563105e-17
发布于 2022-06-29 19:57:09
我不擅长代码,但从数学上讲,您可以有一个while循环来检查数字之和,而不是0。如果不是0,你会把1加到你允许的最低单位。
https://stackoverflow.com/questions/72810121
复制