用python生成具有给定平均值和标准值的分布

2024-03-29 04:40:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个具有给定平均值和std的分布。 但是我不能用精确的平均值和标准差来生成一个分布。 例如:

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

我需要精确的平均值和标准偏差,我把它们放在括号里。我需要使用哪个函数来创建具有固定平均值和std而不是.normal的分布


Tags: importnumpysizeasnpgrouprandomloc
2条回答

要遵循forgetso的答案(从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

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

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

相关问题 更多 >