我写了一个函数mean_normal(n,m,sd),它计算从平均m和标准差sd的正态分布中取得的n个随机选择值的平均值。我想使用map和normalvariate来生成序列,并使用reduce来计算均值,但是我不确定如何做到这一点的语法。以下是我到目前为止的情况:
from random import normalvariate
average = lambda L: sum(L)/len(L)
mean_normal = lambda n, m, sd: average([normalvariate(m, sd) for i in range(n)])
print(mean_normal(10, 5, 2))
我一般都知道我需要像list这样的东西(map(lambda i:...,range(n))但是我不太确定这是对的。
答案 0 :(得分:1)
出于教育目的:
>>> mean_normal2 = lambda n, m, sd: average(map(lambda _: normalvariate(m, sd), range(n)))
>>> mean_normal2(10, 5, 2)
4.749961072139493
诀窍是忽略lambda的参数。但是,最好使用itertools
中的repeatfunc
食谱:
def repeatfunc(func, times=None, *args):
"""Repeat calls to func with specified arguments.
Example: repeatfunc(random.random)
"""
if times is None:
return starmap(func, repeat(args))
return starmap(func, repeat(args, times))
我把它留作练习。