【问题标题】:Mean of normal distribution generated using numpy.random.randn() is not '0'使用 numpy.random.randn() 生成的正态分布的平均值不是“0”
【发布时间】:2020-04-20 11:25:43
【问题描述】:

我试图关注tutorial from quantopian,他们试图证明样本随着大小的增加逐渐表现出正态分布的特征。

我尝试使用numpy.random.randn() 方法生成正态分布,如教程中所示。

我了解此方法返回 sample of the standard normal distribution,而对于正态分布,则返回 mean = 0standard deviation = 1

但是,当我检查这个分布的均值和标准差时,它们显示出奇怪的值,即 mean = 0.23standard deviation = 0.49

代码:

import numpy as np
import matplotlib.pyplot as plt
#np.random.seed(123)
normal = np.random.randn(6)

print (normal.mean())
print (normal.std())

结果:

0.231567632423
0.488577812058

我猜这可能是因为我查看的是只是一个样本,而不是整个分布,这并不完全正常。但如果是这样的话:

  1. 我应该从这个样本中获得哪些特征?

  2. 教程的建议是不是错了,因为它永远不会是正态分布?

【问题讨论】:

  • 您的样本非常小,因此预计会出现均值 = 0 和 sd = 1 的偏差。随着样本量的增加,分布将接近标准正态分布。
  • @ayhan,我现在明白了。
  • 请发布 MCVE。不要指望人们离开现场来回答你
  • @MadPhysicist,添加代码
  • @MadPhysicist 添加了问题中的代码和结果。

标签: python numpy normal-distribution quantopian


【解决方案1】:

您的样本大小为 6。它不够大,无法接近正态分布。尝试使用 600 或 6000 以获得分布的良好表示。

import numpy as np

x = np.random.randn(600)
x.mean(), x.std()
# returns:
(-0.07760043571247623, 0.9664411074909558)

x = np.random.randn(6000)
x.mean(), x.std()
# returns:
(0.003908119246211815, 1.0001989021750033)

6 面骰子的平均掷骰数应为 3.5。但是,如果您只滚动 6 次,您的平均数不太可能达到 3.5。

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 2015-08-14
    • 1970-01-01
    • 2020-06-18
    相关资源
    最近更新 更多