【问题标题】:Generate a distribution in python with given mean and std在 python 中生成具有给定均值和标准差的分布
【发布时间】:2020-12-17 12:00:19
【问题描述】:

我正在尝试创建具有给定均值和标准的分布。 但我无法生成具有精确均值和标准的分布。 例如:

import numpy as np
np.random.seed(0)
group = np.random.normal(loc=10,scale=5,size=50)
print(group.std(),group.mean()) # 5.62761460277423 10.702796361565493

我需要精确的均值和标准差,并将其放入括号中。我需要使用哪个函数来创建具有固定均值和标准的分布而不是 .normal

【问题讨论】:

  • 随着样本量的增加,您将接近所需的均值和标准差

标签: python numpy scipy statistics


【解决方案1】:

如果将size 取为无穷大,则该组的平均值为 10,标准值为 5。目前,您正在绘制size=50 样本。随着size 值的增加,您将更接近所需值。

>>> group = np.random.normal(loc=10,scale=5,size=50000)
>>> print(group.std(),group.mean())
5.000926728104604 9.999396725329085

【讨论】:

  • 是的,我明白了。尽管数组的大小,您是否知道创建具有与我放入括号中的相同均值和标准差的分布的方法。例如,我想创建一个平均为 10 std 5 和大小为 20 的数组,我该如何处理?正是需要这些值,不多不少
  • Tom271 已在下方回答此问题,如果对您有帮助,请点赞。
【解决方案2】:

要遵循忘记的答案(遵循 Law of Large Numbers),移动随机样本以使其具有准确的均值和标准差,您可以将 standardise the values 表示为 0 标准差 1,然后将其移至你想要的值

>>> import numpy as np
>>> np.random.seed(0)
>>> group = np.random.normal(loc=10,scale=5,size=50)
>>> print(group.std(),group.mean())
5.62761460277423 10.702796361565493
>>> group_standardised = (group - group.mean()) / group.std()
>>> print(group_standardised.std(),group_standardised.mean())
1.0 -6.483702463810914e-16
>>> desired_std = 5
>>> desired_mean = 10
>>> group_scaled = group_standardised * desired_std + desired_mean
>>> print(group_scaled.std(),group_scaled.mean())
5.0 9.999999999999996

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 2018-08-16
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 2013-01-02
    相关资源
    最近更新 更多