来自np.random.normal的样本总和应为零吗?

时间:2018-07-20 18:16:05

标签: python numpy statistics robotics normal-distribution

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

但是当我保持机器人静止不动时,这些嘈杂的测量值似乎会累积起来,并且机器人“认为它正在移动”。

这些随机样本不应该累积但总和为零吗?

换句话说,您希望以下内容是正确的吗?

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

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

这仅仅是对随机数生成器的限制,还是我误解了一个事实,即正态分布中的许多样本应求和为零?

1 个答案:

答案 0 :(得分:1)

您的问题的简短答案是“否”。注意不要将独立随机变量数组的总和与这些独立随机变量的平均值混淆。

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

“如果X和Y是正态分布的独立随机变量,那么它们的总和也将呈正态分布。”

有效地,这就是您所做的。您已经创建了一个由独立随机变量组成的数组,并获取了它们的和,然后将它们取正态分布。

我对您的代码做了一些修改,以演示:

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()

产量:enter image description here

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

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