np.random.normal 中的样本总和应该为零吗?

Should samples from np.random.normal sum to zero?

我正在研究机器人的运动模型。在每个时间步中,机器人的运动都会被测量,然后我对正态分布进行采样,测量值为均值,协方差的 sigma 值较小,以模拟噪声。然后将这种嘈杂的运动添加到机器人先前的状态估计中。

但是当我让机器人保持静止时,这些嘈杂的测量值似乎会累积并且机器人 "thinks it's moving."

这些随机样本不应该累加,而是求和为零吗?

换句话说,您认为以下情况是否成立:

0 ~ np.sum([np.random.normal(0, 0.1) for _ in range(1000)])

我已经尝试在一个显式循环中写出上面的内容,并在获取每个样本之前用不同的数字为随机数生成器播种,但总和仍然偏离零很远。

这仅仅是随机数生成器的局限性,还是我误解了正态分布中的许多样本之和应为零这一事实(?)?

对您的问题的简短回答是否定的。注意不要将独立随机变量数组的总和与这些独立随机变量的平均值混为一谈。

根据@Hongyu Wang 在其评论中引用的文章,让我们验证以下内容:

"If X and Y are independent random variables that are normally distributed, then their sum is also normally distributed."

实际上,这就是您所做的。您已经创建了一个独立随机变量数组并计算了它们的总和,而它们的总和应该服从正态分布。

我稍微修改了你的代码来演示:

import random, numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

x = [np.sum([np.random.normal(0,0.1) for _ in range(1000)]) for _ in range(1000)]

sns.distplot(x)
plt.show()

产生:

您可以通过执行以下操作来验证您的正态分布是否正确分布在 0 的均值附近:

np.mean([np.random.normal(0, 0.1) for _ in range(1000)])