我有一个.csv文件,其中包含每个人的均值和标准差。我创建了一个读取文件并创建字典的函数。
def read_data():
f = open("data.csv","r")
reader = csv.reader(f)
for row in reader:
data[row[0]] = (float(row[1]),float(row[2]))
return data
它的输出是
{'Person 1': (50.0, 0.0), 'Person 2': (100.0, 10.0), 'Person 3': (100.0, 5.0)}
我想编写一个函数,该函数获取每个人的均值和标准差,并使用正态分布生成一个随机数。我希望输出为类似
{'Person 1': (*random number*), 'Person 2': (*random number*), 'Person 3': (*random number*)}
谢谢。
答案 0 :(得分:1)
您可以使用random.gauss
。给定一个人的均值和标准差,您可以根据以下正态分布创建一个随机值
from random import gauss
data = {'Person 1': (50.0, 0.0), 'Person 2': (100.0, 10.0), 'Person 3': (100.0, 5.0)}
# Randomize values based on a normal distribution
rand_data = {k: gauss(mu=v[0], sigma=v[1]) for k,v in data.items()}
# mu specifies mean and sigma specifies standard deviation
或者,如果您已经计划使用numpy
,则可以使用numpy.random.normal
:
from numpy.random import normal
data = {'Person 1': (50.0, 0.0), 'Person 2': (100.0, 10.0), 'Person 3': (100.0, 5.0)}
# Randomize values based on a normal distribution
rand_data = {k: normal(loc=v[0], scale=v[1]) for k,v in data.items()}
# loc specifies mean and scale specifies standard deviation
每个的结果给出了以下正在运行的Python 3.7:
{'Person 1': 50.0, 'Person 2': 104.66767928603309, 'Person 3': 90.49432247610861}