是否可以使从正态分布生成的数字列表的平均值完全零?

发布于 2025-02-11 19:34:31 字数 703 浏览 0 评论 0原文

因此,即使在没有有限的机器精度引起的错误的情况下,考虑一个情况在数学上是不正确的,其中有限的从高斯分布中采样的点数始终始终为零。一个人确实需要无限的积分才能使这完全正确。

尽管如此,我(以临时的方式)试图将分布置为中心,以使平均值为零。为此,我首先生成高斯分布,找到它是均值的,然后以该平均值移动每个点。通过执行此操作,我将平均值非常接近零,但是我遇到了一个接近机器精度的小值(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

So, even in the absence of errors due to the finite machine precision it would be mathematically incorrect to think of a scenario where finite number of points sampled from a Gaussian distribution give exactly zero mean always. One would truly need an infinite number of points for this to be exactly true.

Nonetheless, I am manually (in an ad hoc manner) trying to center the distribution so that the mean is at zero. For that I first generate a gaussian distribution, find it's mean and then shift each point with that mean. By doing this I take the mean very close to zero but then I encounter a small value close to the machine precision (of the order 10**(-17)) and I do not know how to make it exactly zero.

Here is the code I used:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

偏爱你一生 2025-02-18 19:34:31

我对代码不好,但是从数学上讲,您可能会有一个段循环,以检查您必须不为0的数字的总和。如果不是0,则会在允许的最低单元中添加1个。

I am not good with code but mathematically you could have a while loop that checks for the sum of the numbers you have to not be 0. If it isn't 0 you would add 1 to the lowest unit you allow.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文