简体   繁体   中英

Generate a distribution in python with given mean and std

I'm trying to create a distribution with given mean and std. But I can't generate a distribution with exact mean and std. For example:

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

I need exact mean and standard deviation that I put into brackets. Which function do I need to use to create a distribution with fixed mean and std instead of.normal

The mean of the group is 10 and the std 5 if you take size to infinity. At the moment, you are drawing size=50 samples. You will get closer to the desired values as you increase the value of size .

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

To follow from forgetso's answer (which follows from the Law of Large Numbers ), to shift your random sample so that it has the exact mean and standard deviation, you can standardise the values to mean 0 standard deviation 1 and then shift it to your desired values

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM